public void Return_the_same_object_within_a_session_for_the_default_of_a_plugin_type() { var count = 0; var instance = new LambdaInstance <ColorRule>("counting", () => { count++; return(new ColorRule("Red")); }); var registry = new Registry(); registry.For <ColorRule>().UseInstance(instance); var graph = registry.Build(); var session = BuildSession.ForPluginGraph(graph); var result1 = session.GetInstance(typeof(ColorRule)); var result2 = session.GetInstance(typeof(ColorRule)); var result3 = session.GetInstance(typeof(ColorRule)); var result4 = session.GetInstance(typeof(ColorRule)); count.ShouldBe(1); result1.ShouldBeTheSameAs(result2); result1.ShouldBeTheSameAs(result3); result1.ShouldBeTheSameAs(result4); }
public void Read_in_a_class_with_primitive_arrays() { string xml = @" <Instance> <numbers Values='1,2,3'/> <strings Values='1,2,3'/> </Instance> "; XmlElement element = DataMother.BuildDocument(xml).DocumentElement; element.SetAttribute("PluggedType", typeof(ClassWithStringAndIntArray).AssemblyQualifiedName); var memento = new XmlAttributeInstanceMemento(element); var graph = new PluginGraph(); Instance instance = memento.ReadInstance(new SimplePluginFactory(), typeof(ClassWithStringAndIntArray)); var theObject = (ClassWithStringAndIntArray)instance.Build(typeof(ClassWithStringAndIntArray), BuildSession.ForPluginGraph(graph)); theObject.Numbers.ShouldEqual(new[] { 1, 2, 3 }); theObject.Strings.ShouldEqual(new[] { "1", "2", "3" }); Debug.WriteLine(theObject.GetType().AssemblyQualifiedName); }
public void Return_the_same_object_within_a_session_for_the_default_of_a_plugin_type() { int count = 0; var instance = new LambdaInstance <ColorRule>(() => { count++; return(new ColorRule("Red")); }); var registry = new Registry(); registry.For <ColorRule>().Use(instance); PluginGraph graph = registry.Build(); var session = BuildSession.ForPluginGraph(graph); object result1 = session.GetInstance(typeof(ColorRule)); object result2 = session.GetInstance(typeof(ColorRule)); object result3 = session.GetInstance(typeof(ColorRule)); object result4 = session.GetInstance(typeof(ColorRule)); Assert.AreEqual(1, count); Assert.AreSame(result1, result2); Assert.AreSame(result1, result3); Assert.AreSame(result1, result4); }
public void when_retrieving_with_try_get_instance_with_nongeneric_type_that_does_exist() { var theService = new ColorService("red"); var registry = new Registry(); registry.For <IService>().Use(theService); var session = BuildSession.ForPluginGraph(registry.Build()); session.TryGetInstance(typeof(IService)).ShouldBeTheSameAs(theService); }
public void push_and_pop_an_instance_onto_a_session() { var session = BuildSession.ForPluginGraph(PluginGraph.CreateRoot()); session.Push(new SmartInstance <AWidget>()); session.Push(new LambdaInstance <StubbedGateway>(c => new StubbedGateway())); session.Push(new SmartInstance <ARule>()); session.Pop(); session.ParentType.ShouldBe(typeof(AWidget)); }
public void SetUp() { var registry = new Registry(); registry.For <Rule>(); registry.Scan(x => { x.Assembly("StructureMap.Testing.Widget"); x.Assembly("StructureMap.Testing.Widget2"); }); var graph = registry.Build(); _session = BuildSession.ForPluginGraph(graph); }
public void Can_get_an_instance_using_the_non_generic_method() { var registry = new Registry(); registry.For <IFooService>().Use <Service>(); var graph = registry.Build(); var session = BuildSession.ForPluginGraph(graph); var instance = session.GetInstance(typeof(IFooService)); instance.ShouldNotBeNull(); instance.ShouldBeOfType <Service>(); }
public void when_retrieving_by_try_get_named_instance_with_nongeneric_type_that_does_exist() { var red = new ColorService("red"); var green = new ColorService("green"); var registry = new Registry(); registry.For <IService>().Add(red).Named("red"); registry.For <IService>().Add(green).Named("green"); var graph = registry.Build(); var session = BuildSession.ForPluginGraph(graph); session.TryGetInstance(typeof(IService), "red").ShouldBeTheSameAs(red); }
public void when_retrieving_an_object_by_nongeneric_type_and_name() { var red = new ColorService("red"); var green = new ColorService("green"); var registry = new Registry(); registry.For <IService>().Add(red).Named("red"); registry.For <IService>().Add(green).Named("green"); var graph = registry.Build(); var session = BuildSession.ForPluginGraph(graph); session.GetInstance(typeof(IService), "red").ShouldBeTheSameAs(red); }
public void when_retrieving_an_object_by_name() { var red = new ColorService("red"); var green = new ColorService("green"); var graph = PluginGraph.CreateRoot(); var family = graph.Families[typeof(IService)]; family.AddInstance(new ObjectInstance(red).Named("red")); family.AddInstance(new ObjectInstance(green).Named("green")); var session = BuildSession.ForPluginGraph(graph); session.GetInstance <IService>("red").ShouldBeTheSameAs(red); }
public void push_an_instance_onto_a_session() { var session = BuildSession.ForPluginGraph(new PluginGraph()); session.Push(new LambdaInstance <StubbedGateway>(c => new StubbedGateway())); session.ParentType.ShouldBeNull(); session.Push(new SmartInstance <ARule>()); session.ParentType.ShouldBe(typeof(StubbedGateway)); session.Push(new SmartInstance <AWidget>()); session.ParentType.ShouldBe(typeof(ARule)); }
public void pushing_the_same_instance_will_throw_a_bidirectional_dependency_exception() { var session = BuildSession.ForPluginGraph(PluginGraph.CreateRoot()); var instance1 = new SmartInstance <StubbedGateway>(); var instance2 = new SmartInstance <ARule>(); var instance3 = new SmartInstance <AWidget>(); session.Push(instance1); session.Push(instance2); session.Push(instance3); var ex = Exception <StructureMapBuildException> .ShouldBeThrownBy(() => { session.Push(instance1); }); ex.Message.ShouldContain("Bi-directional dependency relationship detected!"); }
public void when_retrieving_by_try_get_named_instance_that_does_exist() { var red = new ColorService("red"); var green = new ColorService("green"); var graph = new PluginGraph(); PluginFamily family = graph.Families[typeof(IService)]; family.AddInstance(new ObjectInstance(red).Named("red")); family.AddInstance(new ObjectInstance(green).Named("green")); var session = BuildSession.ForPluginGraph(graph); session.TryGetInstance <IService>("red").ShouldBeTheSameAs(red); session.TryGetInstance <IService>("green").ShouldBeTheSameAs(green); }
public ConfiguredInstanceTester() { var registry = new Registry(); registry.For <Rule>(); registry.Scan(x => { x.Assembly("StructureMap.Testing.Widget"); x.Assembly("StructureMap.Testing.Widget2"); x.WithDefaultConventions(); }); var graph = registry.Build(); _session = BuildSession.ForPluginGraph(graph); }
public void parent_type_is_null_in_the_initial_state() { var session = BuildSession.ForPluginGraph(PluginGraph.CreateRoot()); session.ParentType.ShouldBeNull(); }