|
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.
|