---------------- Version 0.8.1 ---------------- Minor performance improvements. ---------------- Version 0.8 ---------------- API change for custom Lifestyles. Before: using IfInjector.IfBinding.IfLifestyle; To using IfInjector.Bindings.Lifestyle ---------------- Version 0.7 ---------------- This is a major change. The most important change is that for 'explicit' bindings (EG Bind(..)) the system will now throw an exception once you have called Resolve(). This move to immutability solved a number of edge nasty edge cases. Also at a functional level, for property injection bindings have been split for instance binding; this allows for explicit configuration of each. At an API level, the syntax for explicit bindings has changed from: injector.Bind() .AddPropertyInjector(...) .AddPropertyInjector(...) .AsSingleton(); To injector.Register(Binding.For().To() .InjectMember(...) .InjectMember(...) .AsSingleton()); Finally, in terms of new features, V0.7 adds custom lifecycles. ------- To create / use a custom lifestyle var myCustomLifestyle = Lifestyle.CreateCustom(instanceCreator => { ThreadLocal instance = new ThreadLocal(instanceCreator); return () => { return instance.Value; } }); injector.Register(Binding.For().To() .InjectMember(...) .InjectMember(...) .SetLifestyle(myCustomLifestyle)); ---------------- Version 0.6.1/0.6.2 ---------------- It turns out, for whatever reason, nuget was packing my debug .dll rather than my release .dll. Packaging the correct DLL resolved the issue. ---------------- Version 0.6 ---------------- DEPRECATED OLD WAY: Injector injector = Injector.NewInstance(); NEW WAY: Injector injector = new Injector(); CHANGES Major: - Providers: - Decide on use of injector.Resolve<>() for provider - You may now do the following to inject a copy of the injector into your class class MyClass { [Inject] private Injector injector; } - The internal packaging structure has been completely refactored to break the . This is to ready the code Minor: - Clean up of units Open Issues - 30-40% performance degredation as compared with V0.5.1 ---------------- Version 0.5.1 ---------------- Major - Property injection with factories were broken - Changed dependency chain clearing logic to maintain type=>Set(IResolvers) map - This ensures that clearing a type only modifies types that depend on the given type - The practical reason for this is if you have 1000+ objects I was looping over all of them each time you changed a binding - With the change, I only clear the the dependencies and which removes them from the type=>Set(IResolver) list - Thus, if you have 5+ dependencies, I only tell each of them to clear themselves once - Fixed edge condition where 2 concurrent threads cause double initialization of singleton - Refactored unit tests and increased coverage of factores to help avoid repeat. Minor - Code Hygene ---------------- Version 0.5 ---------------- Added support for WF7.5. For 'factory' based construction there are some performance degredations - most of which are neglibible if you only use 'property injection'. For 'field' injection, the changes forced the use of reflection. To give a very concrete example, this is the only thing that requires heavy reflections: class MyType {} class MyOtherType { [IfInject] // Could also be .AddPropertyInjector() style binding public MyType MyType; // public vs private does not matter here, just that it is a 'field' rather than a property [IfInject] public MyType MyTypeProp { get; private set; } // This will cause NO issues } injector.Bind().SetFactory(() => return new MyOtherType()); // NOTE: the following will not suffer, as I am able to leverage a more performant LINQ expression for constructors. injector.Bind(); // NOTE: no factory