From: <jer...@us...> - 2009-04-19 20:45:14
|
Revision: 237 http://structuremap.svn.sourceforge.net/structuremap/?rev=237&view=rev Author: jeremydmiller Date: 2009-04-19 20:45:09 +0000 (Sun, 19 Apr 2009) Log Message: ----------- Fixing missing instance, PhatBoyG's patch Modified Paths: -------------- trunk/Source/StructureMap/Graph/PluginFamily.cs trunk/Source/StructureMap/InstanceFactory.cs trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj Added Paths: ----------- trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs =================================================================== --- trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-04-19 19:17:16 UTC (rev 236) +++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2009-04-19 20:45:09 UTC (rev 237) @@ -20,7 +20,6 @@ private IBuildPolicy _buildPolicy = new BuildPolicy(); private string _defaultKey = string.Empty; private PluginGraph _parent; - private IBuildPolicy _policy; public PluginFamily(Type pluginType) : this(pluginType, new PluginGraph()) @@ -260,6 +259,11 @@ { source.EachInstance(instance => _instances.Fill(instance.Name, instance)); source._pluggedTypes.Each((key, plugin) => _pluggedTypes.Fill(key, plugin)); + + if (source.MissingInstance != null) + { + MissingInstance = source.MissingInstance; + } } public Instance FirstInstance() @@ -340,7 +344,7 @@ public IBuildPolicy Policy { get { return _buildPolicy; } - set { _policy = value; } + set { _buildPolicy = value; } } public int PluginCount Modified: trunk/Source/StructureMap/InstanceFactory.cs =================================================================== --- trunk/Source/StructureMap/InstanceFactory.cs 2009-04-19 19:17:16 UTC (rev 236) +++ trunk/Source/StructureMap/InstanceFactory.cs 2009-04-19 20:45:09 UTC (rev 237) @@ -151,6 +151,11 @@ } family.EachInstance(instance => _instances.Fill(instance.Name, instance)); + + if (family.MissingInstance != null) + { + MissingInstance = family.MissingInstance; + } } public void EjectAllInstances() Added: trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs =================================================================== --- trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Bugs/MixedConfigureAndInitializeMissingInstanceProblem.cs 2009-04-19 20:45:09 UTC (rev 237) @@ -0,0 +1,49 @@ +using NUnit.Framework; +using StructureMap.Testing.Widget; + +namespace StructureMap.Testing.Bugs +{ + [TestFixture] public class MixedConfigureAndInitializeMissingInstanceProblem + { + private Container container; + + [SetUp] public void SetUp() + { + container = new Container(x => + { + x.ForRequestedType<IWidget>().MissingNamedInstanceIs.Conditional(o => + { + o.TheDefault.Is.ConstructedBy(c => new ColorWidget(c.RequestedName)); + }); + }); + } + + [Test] public void configure_again_and_try_to_fetch_the_missing_instance() + { + container.Configure(x => + { + x.ForRequestedType<IWidget>().TheDefaultIsConcreteType<AWidget>(); + }); + + container.GetInstance<IWidget>("Red").ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Red"); + } + + [Test] public void configure_the_missing_method_instance_in_the_configure() + { + container = new Container(x => + { + x.ForRequestedType<IWidget>().TheDefaultIsConcreteType<AWidget>(); + }); + + container.Configure(x => + { + x.ForRequestedType<IWidget>().MissingNamedInstanceIs.Conditional(o => + { + o.TheDefault.Is.ConstructedBy(c => new ColorWidget(c.RequestedName)); + }); + }); + + container.GetInstance<IWidget>("Red").ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Red"); + } + } +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2009-04-19 19:17:16 UTC (rev 236) +++ trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2009-04-19 20:45:09 UTC (rev 237) @@ -7,7 +7,9 @@ namespace StructureMap.Testing { - [TestFixture] + using StructureMap.Attributes; + + [TestFixture] public class GenericsAcceptanceTester { #region Setup/Teardown @@ -216,6 +218,22 @@ { Assert.IsTrue(GenericsPluginGraph.CanBeCast(typeof (ITarget<,>), typeof (DisposableTarget<,>))); } + + [Test] + public void CanGetTheSameInstanceOfGenericInterfaceWithSingletonScope() + { + Container con = new Container(x => + { + x.ForRequestedType(typeof (IService<>)) + .CacheBy(InstanceScope.Singleton) + .TheDefaultIsConcreteType(typeof (Service<>)); + }); + + var first = con.GetInstance<IService<string>>(); + var second = con.GetInstance<IService<string>>(); + + Assert.AreSame(first, second, "The objects are not the same instance"); + } } @@ -295,4 +313,4 @@ return typeof (T); } } -} \ No newline at end of file +} Modified: trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs 2009-04-19 19:17:16 UTC (rev 236) +++ trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs 2009-04-19 20:45:09 UTC (rev 237) @@ -95,11 +95,13 @@ [Test] public void CloneSingleton() { + var inner = new BuildPolicy(); var policy = new SingletonPolicy(); + policy.InnerPolicy = inner; - var clone = (SingletonPolicy) policy.Clone(); - Assert.AreNotSame(policy, clone); - Assert.IsInstanceOfType(typeof (BuildPolicy), clone.InnerPolicy); + var clone = policy.Clone().ShouldBeOfType<SingletonPolicy>(); + clone.ShouldNotBeTheSameAs(policy); + clone.InnerPolicy.ShouldBeOfType<BuildPolicy>(); } Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-04-19 19:17:16 UTC (rev 236) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2009-04-19 20:45:09 UTC (rev 237) @@ -182,6 +182,7 @@ <Compile Include="Bugs\HttpSessionNullRefBug.cs" /> <Compile Include="Bugs\IDictionaryAndXmlBugTester.cs" /> <Compile Include="Bugs\LambdaCreatesNullBugTester.cs" /> + <Compile Include="Bugs\MixedConfigureAndInitializeMissingInstanceProblem.cs" /> <Compile Include="Bugs\ScanIndexerBugTester.cs" /> <Compile Include="Bugs\SingletonShouldBeLazy.cs" /> <Compile Include="Bugs\SpecifyScopeInConfigureTester.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |