diff --git a/build.gradle b/build.gradle index dace193..63ae173 100644 --- a/build.gradle +++ b/build.gradle @@ -8,6 +8,7 @@ plugins { dependencies { api libs.jakarta.inject + api libs.groovy compileOnlyApi libs.jetbrains.anotations implementation libs.slf4j.api, libs.groovy } diff --git a/src/main/java/groowt/util/di/AbstractRegistryObjectFactory.java b/src/main/java/groowt/util/di/AbstractRegistryObjectFactory.java index 70fa706..f6e530e 100644 --- a/src/main/java/groowt/util/di/AbstractRegistryObjectFactory.java +++ b/src/main/java/groowt/util/di/AbstractRegistryObjectFactory.java @@ -75,8 +75,8 @@ public abstract class AbstractRegistryObjectFactory extends AbstractInjectingObj } @Override - public void configureRegistry(Consumer use) { - use.accept(this.registry); + public Registry getRegistry() { + return this.registry; } @Override diff --git a/src/main/java/groowt/util/di/Registry.java b/src/main/java/groowt/util/di/Registry.java index e7c1862..cdb778e 100644 --- a/src/main/java/groowt/util/di/Registry.java +++ b/src/main/java/groowt/util/di/Registry.java @@ -6,6 +6,7 @@ import java.util.function.Consumer; import java.util.function.Predicate; public interface Registry extends ExtensionContainer, QualifierHandlerContainer, ScopeHandlerContainer { + void bind(Class key, Consumer> configure); @Nullable Binding getBinding(Class key); void removeBinding(Class key); diff --git a/src/main/java/groowt/util/di/RegistryObjectFactory.java b/src/main/java/groowt/util/di/RegistryObjectFactory.java index a0d236c..d79d7a7 100644 --- a/src/main/java/groowt/util/di/RegistryObjectFactory.java +++ b/src/main/java/groowt/util/di/RegistryObjectFactory.java @@ -1,5 +1,9 @@ package groowt.util.di; +import groovy.lang.Closure; +import groovy.lang.DelegatesTo; +import groovy.transform.stc.ClosureParams; +import groovy.transform.stc.FromString; import groowt.util.di.filters.FilterHandler; import groowt.util.di.filters.IterableFilterHandler; import jakarta.inject.Provider; @@ -22,7 +26,21 @@ public interface RegistryObjectFactory extends ObjectFactory { T build(); } - void configureRegistry(Consumer use); + Registry getRegistry(); + + default void configureRegistry(Consumer use) { + use.accept(this.getRegistry()); + } + + default void configureRegistry( + @DelegatesTo(Registry.class) + @ClosureParams(value = FromString.class, options = "groowt.util.di.Registry") + Closure configureClosure + ) { + final Registry registry = this.getRegistry(); + configureClosure.setDelegate(registry); + configureClosure.call(registry); + } @Nullable ScopeHandler findScopeHandler(Class scopeType);