X-Git-Url: http://wamblee.org/gitweb/?a=blobdiff_plain;ds=inline;f=support%2Finject%2Fsrc%2Fmain%2Fjava%2Forg%2Fwamblee%2Finject%2FInjectorFactoryBuilder.java;h=197311a8b262927ee39d9b45e6a9fcea79940217;hb=7cc24116aec0bb2ae0cdec40b31ef745e7a93115;hp=d8190919db6a0ca2f2e0163b541521b3edf55a04;hpb=43f6c5285c83202b485e25e8ec20122339955a52;p=utils
diff --git a/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java b/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java
index d8190919..197311a8 100644
--- a/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java
+++ b/support/inject/src/main/java/org/wamblee/inject/InjectorFactoryBuilder.java
@@ -20,19 +20,56 @@ import java.util.ServiceLoader;
/**
* Utility for obtaining an implementation of the {@link InjectorFactory} using
- * {@link ServiceLoader}.
+ * {@link ServiceLoader} and for obtaining a {@link SimpleInjector}.
+ *
+ * The builder takes care that the factory and simple injector are built only once.
+ * For test code, make sure to call {@link #setInjectorFactory(InjectorFactory)}
+ * before each test case to force the retrieval of a new factory and injector. This
+ * is important because if the simple injector is not created again it will use
+ * cached {@link Injector} instances from other tests.
*
* @author Erik Brakkee
*/
public class InjectorFactoryBuilder {
+ private static InjectorFactory FACTORY;
+
+ private static SimpleInjector INJECTOR;
+
/**
- * Gets the injector factory by using the first one found using
- * {@link ServiceLoader}.
+ * Sets the injector factory. This is useful for testing.
+ * @param aFactory Factory to use.
+ */
+ public static void setInjectorFactory(InjectorFactory aFactory) {
+ FACTORY = aFactory;
+ INJECTOR = new SimpleInjector(aFactory);
+ }
+
+ /**
+ * Gets the injector factory by using the first one found using
+ * {@link ServiceLoader}.
*
- * @return InjectorFactory.
+ * @return InjectorFactory.
*/
public static InjectorFactory getInjectorFactory() {
+ if (FACTORY == null) {
+ FACTORY = findInjectorFactory();
+ INJECTOR = new SimpleInjector(FACTORY);
+ }
+ return FACTORY;
+ }
+
+ public static SimpleInjector getInjector() {
+ getInjectorFactory();
+ return INJECTOR;
+ }
+
+ /**
+ * Finds the injector factory musing ServiceLoader
+ *
+ * @return InjectorFactory.
+ */
+ private static InjectorFactory findInjectorFactory() {
ServiceLoader factories = ServiceLoader
.load(InjectorFactory.class);
try {