public void TestDIFactoryMerge() { DIFactory factory = new DIFactory(); factory.CreationMapping.Add(typeof(MyCreatingThing), (DIFactory f) => { return(new MyCreatingThing { Nuts = f.GetSetting <ThingSettings, int>(ThingSettings.One) }); }); factory.ReleaseMapping.Add(typeof(MyCreatingThing), (DIFactory f, object o) => { Logger.Info("releasing a MyCreatingThing"); }); factory.SetSetting(ThingSettings.One, 999); DIFactory factory2 = new DIFactory(); factory2.CreationMapping.Add(typeof(IThingy), (DIFactory f) => { return(new MyThingyImplemented()); }); factory2.ReleaseMapping.Add(typeof(IThingy), (DIFactory f, object o) => { Logger.Info("releasing an IThingy"); }); factory2.SetSetting(ThingSettings.Two, "A lot of whatever"); var newFactory = DIFactory.Merge(factory, factory2); Assert.IsTrue(newFactory.Create <MyCreatingThing>().Nuts == 999); Assert.IsTrue(newFactory.GetSetting <ThingSettings, string>(ThingSettings.Two) == "A lot of whatever"); MyAssert.ThrowsException(() => DIFactory.Merge(newFactory, factory)); MyAssert.ThrowsException(() => DIFactory.Merge(newFactory, factory2)); }