(no commit message)
[utils] / support / inject / src / main / java / org / wamblee / inject / InjectorFactoryBuilder.java
index 13db8412d886a54474b808aa329ff69792aa7327..197311a8b262927ee39d9b45e6a9fcea79940217 100644 (file)
@@ -20,13 +20,21 @@ 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; 
 
     /**
      * Sets the injector factory. This is useful for testing. 
@@ -34,6 +42,7 @@ public class InjectorFactoryBuilder {
      */
     public static void setInjectorFactory(InjectorFactory aFactory) {
         FACTORY = aFactory;
+        INJECTOR = new SimpleInjector(aFactory);
     }
 
     /**
@@ -45,9 +54,15 @@ public class InjectorFactoryBuilder {
     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 <code>ServiceLoader</code>