|
From: <jer...@us...> - 2008-02-28 15:00:21
|
Revision: 68
http://structuremap.svn.sourceforge.net/structuremap/?rev=68&view=rev
Author: jeremydmiller
Date: 2008-02-28 07:00:17 -0800 (Thu, 28 Feb 2008)
Log Message:
-----------
Fixing the bug with AddInstanceOf<Blah>() creating two instances in the call to GetAllInstances()
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs
trunk/Source/StructureMap/Graph/PluginCollection.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IInstanceManager.cs
trunk/Source/StructureMap/InstanceManager.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Container/SetterInjectionEmittingTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -97,7 +97,7 @@
_alterations.Add(delegate(PluginFamily family)
{
- Plugin plugin = family.Plugins.FindOrCreate(typeof (CONCRETETYPE));
+ Plugin plugin = family.Plugins.FindOrCreate(typeof (CONCRETETYPE), true);
family.DefaultInstanceKey = plugin.ConcreteKey;
});
@@ -161,7 +161,7 @@
{
Plugin plugin = Plugin.CreateImplicitPlugin(typeof (CONCRETETYPE));
plugin.ConcreteKey = instanceName;
- family.Plugins.Add(plugin);
+ family.Plugins.Add(plugin, true);
}
);
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -25,7 +25,10 @@
protected override InstanceMemento memento
{
- get { return _memento; }
+ get
+ {
+ return _memento;
+ }
}
protected override InstanceExpression thisInstance
@@ -42,7 +45,7 @@
{
Plugin plugin = _pluggedType == null
? family.Plugins[_memento.ConcreteKey]
- : family.Plugins.FindOrCreate(_pluggedType);
+ : family.Plugins.FindOrCreate(_pluggedType, false);
_memento.ConcreteKey = plugin.ConcreteKey;
}
@@ -176,6 +179,7 @@
public InstanceExpression UsingConcreteType<T>()
{
_parent._pluggedType = typeof (T);
+ _parent._memento.InstanceKey = typeof (T).Name;
return _parent;
}
Modified: trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/Configuration/NormalGraphBuilder.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -159,7 +159,7 @@
Plugin plugin = new Plugin(pluginPath, concreteKey);
plugin.DefinitionSource = DefinitionSource.Explicit;
- family.Plugins.Add(plugin);
+ family.Plugins.Add(plugin, true);
return plugin;
}
@@ -200,7 +200,7 @@
Plugin inferredPlugin = memento.CreateInferredPlugin();
if (inferredPlugin != null)
{
- family.Plugins.Add(inferredPlugin);
+ family.Plugins.Add(inferredPlugin, true);
}
family.Source.AddExternalMemento(memento);
Modified: trunk/Source/StructureMap/Graph/PluginCollection.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginCollection.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/Graph/PluginCollection.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -93,7 +93,7 @@
public void Add(TypePath path, string concreteKey)
{
Plugin plugin = new Plugin(path, concreteKey);
- Add(plugin);
+ Add(plugin, true);
}
/// <summary>
@@ -105,10 +105,10 @@
public void Add(Type pluggedType, string concreteKey)
{
Plugin plugin = Plugin.CreateExplicitPlugin(pluggedType, concreteKey, string.Empty);
- Add(plugin);
+ Add(plugin, true);
}
- public void Add(Plugin plugin)
+ public void Add(Plugin plugin, bool addInstanceOfTypeIfPossible)
{
// Reject if a duplicate ConcreteKey
if (_plugins.ContainsKey(plugin.ConcreteKey))
@@ -129,10 +129,12 @@
throw new StructureMapException(114, plugin.PluggedType.FullName, _family.PluginTypeName);
}
- plugin.AddToSource(_family.Source);
+ _plugins.Add(plugin.ConcreteKey, plugin);
-
- _plugins.Add(plugin.ConcreteKey, plugin);
+ if (addInstanceOfTypeIfPossible)
+ {
+ plugin.AddToSource(_family.Source);
+ }
}
/// <summary>
@@ -162,10 +164,10 @@
}
}
- public Plugin FindOrCreate(Type pluggedType)
+ public Plugin FindOrCreate(Type pluggedType, bool createDefaultInstanceOfType)
{
Plugin plugin = Plugin.CreateImplicitPlugin(pluggedType);
- Add(plugin);
+ Add(plugin, createDefaultInstanceOfType);
return plugin;
}
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -20,7 +20,7 @@
PluginFamily family = new PluginFamily(pluginType);
family.DefinitionSource = DefinitionSource.Implicit;
- family.Plugins.Add(plugin);
+ family.Plugins.Add(plugin, true);
family.DefaultInstanceKey = plugin.ConcreteKey;
return family;
@@ -135,7 +135,7 @@
if (isOfCorrectGenericType(plugin, templateTypes))
{
Plugin templatedPlugin = plugin.CreateTemplatedClone(templateTypes);
- templatedFamily.Plugins.Add(templatedPlugin);
+ templatedFamily.Plugins.Add(templatedPlugin, true);
foreach (InstanceMemento memento in _source.GetAllMementos())
{
if (memento.ConcreteKey == plugin.ConcreteKey)
@@ -196,7 +196,7 @@
foreach (Plugin plugin in plugins)
{
- _plugins.Add(plugin);
+ _plugins.Add(plugin, true);
}
return plugins;
Modified: trunk/Source/StructureMap/IInstanceManager.cs
===================================================================
--- trunk/Source/StructureMap/IInstanceManager.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/IInstanceManager.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -80,5 +80,6 @@
object CreateInstance(Type pluginType, string instanceKey);
PLUGINTYPE CreateInstance<PLUGINTYPE>(ExplicitArguments args);
+ void Inject<PLUGINTYPE>(PLUGINTYPE instance);
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/InstanceManager.cs
===================================================================
--- trunk/Source/StructureMap/InstanceManager.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/InstanceManager.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -163,6 +163,13 @@
}
+ public void Inject<PLUGINTYPE>(PLUGINTYPE instance)
+ {
+ LiteralMemento memento = new LiteralMemento(instance);
+ AddInstance<PLUGINTYPE>(memento);
+ SetDefault(typeof(PLUGINTYPE), memento);
+ }
+
public T CreateInstance<T>()
{
return (T) CreateInstance(typeof (T));
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -88,9 +88,7 @@
/// <param name="instance"></param>
public static void Inject<PLUGINTYPE>(PLUGINTYPE instance)
{
- LiteralMemento memento = new LiteralMemento(instance);
- manager.AddInstance<PLUGINTYPE>(memento);
- manager.SetDefault(typeof (PLUGINTYPE), memento);
+ manager.Inject<PLUGINTYPE>(instance);
}
/// <summary>
Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -77,7 +77,7 @@
// Set the auto mocking container to use a Stub for Type T
public void InjectStub<T>(T stub)
{
- _manager.InjectStub<T>(stub);
+ _manager.Inject<T>(stub);
}
// So that Aaron Jensen can use his concrete HubService object
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using NUnit.Framework;
using StructureMap.Attributes;
using StructureMap.Configuration.DSL;
@@ -174,6 +175,39 @@
Assert.IsInstanceOfType(typeof (DefaultGateway), gateway);
}
+
+ [Test]
+ public void AddInstanceByNameOnlyAddsOneInstanceToStructureMap()
+ {
+ Registry registry = new Registry();
+ registry.ForRequestedType<Something>().AddInstance(
+ Registry.Instance<Something>().UsingConcreteType<RedSomething>().WithName("Red")
+ );
+
+ IInstanceManager manager = registry.BuildInstanceManager();
+ IList<Something> instances = manager.GetAllInstances<Something>();
+ Assert.AreEqual(1, instances.Count);
+ }
+
+ [Test]
+ public void AddInstanceWithNameOnlyAddsOneInstanceToStructureMap()
+ {
+ PluginGraph graph = new PluginGraph();
+ Registry registry = new Registry(graph);
+ registry.AddInstanceOf<Something>().UsingConcreteType<RedSomething>().WithName("Red");
+
+
+
+ IInstanceManager manager = registry.BuildInstanceManager();
+ IList<Something> instances = manager.GetAllInstances<Something>();
+ Assert.AreEqual(1, instances.Count);
+ }
+
+ public class Something{}
+
+ public class RedSomething : Something{}
+ public class GreenSomething : Something{}
+
}
public class StubbedInstanceFactoryInterceptor : InstanceFactoryInterceptor
Modified: trunk/Source/StructureMap.Testing/Container/SetterInjectionEmittingTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Container/SetterInjectionEmittingTester.cs 2008-02-14 15:31:38 UTC (rev 67)
+++ trunk/Source/StructureMap.Testing/Container/SetterInjectionEmittingTester.cs 2008-02-28 15:00:17 UTC (rev 68)
@@ -54,7 +54,7 @@
{
PluginFamily family = new PluginFamily(typeof (IGridColumn));
Plugin plugin = Plugin.CreateImplicitPlugin(typeof (EnumGridColumn));
- family.Plugins.Add(plugin);
+ family.Plugins.Add(plugin, true);
InstanceFactory factory = new InstanceFactory(family, true);
InstanceMemento memento = _source.GetMemento("Enum");
@@ -69,7 +69,7 @@
{
PluginFamily family = new PluginFamily(typeof (IGridColumn));
Plugin plugin = Plugin.CreateImplicitPlugin(typeof (LongGridColumn));
- family.Plugins.Add(plugin);
+ family.Plugins.Add(plugin, true);
InstanceFactory factory = new InstanceFactory(family, true);
InstanceMemento memento = _source.GetMemento("Long");
@@ -86,7 +86,7 @@
{
PluginFamily family = new PluginFamily(typeof (IGridColumn));
Plugin plugin = Plugin.CreateImplicitPlugin(typeof (StringGridColumn));
- family.Plugins.Add(plugin);
+ family.Plugins.Add(plugin, true);
InstanceFactory factory = new InstanceFactory(family, true);
InstanceMemento memento = _source.GetMemento("String");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|