- Butterfly DI Container
- Getting Started With Butterfly DI Container
- Butterfly Container Script
- Extending Butterfly Container Script With Constants
- Extending Butterfly Container Script With Functions
- Extending Butterfly Container Script With Instantiation Modes
- Injecting ThreadLocal Objects
- Localization and Internationalization
- Replacing Factories
- Mock Dependencies
- Unit Testing
- Butterfly Container vs. Others
- Butterfly Container Performance
- Butterfly Container Script Type Safety
- Why Not XML?
From version 2.1.9 it is possible to replace factories at runtime. When replacing a factory all factories referencing the old factory will instead reference the new factory. However, if any factory in the container, or component in your application, holds references to cached instances from the old factory (singletons, flyweights etc.), these references will not be updated to reference cached instances from the new factory.
Here is how to replace a factory in the container:
IContainer container = new Container(); ScriptFactoryBuilder scriptBuilder = new ScriptFactoryBuilder(container); //adding a factory scriptBuilder.addFactory("test = * com.jenkov.MyProduct(); "); //replacing the factory scriptBuilder.replaceFactory("test = * com.jenkov.MyProduct('Replacement');" ); //replacing the factory with a Java factory. // MyNewFactory must be a Java factory class. // See "Getting Started" for more details on Java factories. JavaFactoryBuilder javaBuilder = new JavaFactoryBuilder(container); javaBuilder.replaceFactory("test", new MyNewFactory());
It is also possible to replace several script factories at a time, by using the ScriptFactoryBuilder.replaceFactories(InputStream) method. All factories in the new script will replace existing factories.
Replacing a factory that does not exist (no factory added by that name) is equivalent to adding the factory.