From 58595fa41796c6112d0a32e62d2ca723fed79bad Mon Sep 17 00:00:00 2001
From: erik <erik@77661180-640e-0410-b3a8-9f9b13e6d0e0>
Date: Thu, 22 Jul 2010 08:47:47 +0000
Subject: [PATCH]

---
 .../java/org/wamblee/inject/Injectable.java     | 14 +++++++++++---
 .../wamblee/inject/InjectorFactoryBuilder.java  | 17 ++++++++++++++++-
 2 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/support/inject/src/main/java/org/wamblee/inject/Injectable.java b/support/inject/src/main/java/org/wamblee/inject/Injectable.java
index 4f55cc35..b44192cf 100644
--- a/support/inject/src/main/java/org/wamblee/inject/Injectable.java
+++ b/support/inject/src/main/java/org/wamblee/inject/Injectable.java
@@ -29,13 +29,21 @@ package org.wamblee.inject;
  */
 public abstract class Injectable {
 
-    private static final SimpleInjector INJECTOR = new SimpleInjector(
-        InjectorFactoryBuilder.getInjectorFactory());
+    private final SimpleInjector injector = 
+        InjectorFactoryBuilder.getInjector();
 
     /**
      * Inheritance style constructor.
      */
     protected Injectable() {
-        INJECTOR.inject(this);
+        injector.inject(this);
     }    
+    
+    /**
+     * Gets the default injector.
+     * @return Injector. 
+     */
+    public SimpleInjector getInjector() {
+        return injector;
+    }
 }
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 13db8412..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,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>
-- 
2.31.1