Exemple #1
0
        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));
        }