|
From: <jer...@us...> - 2008-05-28 15:50:17
|
Revision: 109
http://structuremap.svn.sourceforge.net/structuremap/?rev=109&view=rev
Author: jeremydmiller
Date: 2008-05-28 08:50:14 -0700 (Wed, 28 May 2008)
Log Message:
-----------
Modified Paths:
--------------
trunk/Source/StructureMap/Emitting/ClassBuilder.cs
trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs
trunk/Source/StructureMap/InstanceBuilder.cs
trunk/Source/StructureMap/InstanceBuilderList.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj
trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
trunk/Source/StructureMap.Testing/Container/EmittingTester.cs
trunk/Source/StructureMap.Testing/Container/InstanceFactoryTester.cs
trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs
trunk/Source/StructureMap.Testing.Widget/Decision.cs
trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs
trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs
trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs
Added Paths:
-----------
trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs
trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs
trunk/Source/StructureMap.Testing/MergingTester.cs
Removed Paths:
-------------
trunk/Source/StructureMap/InstanceManager.cs
trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs
Modified: trunk/Source/StructureMap/Emitting/ClassBuilder.cs
===================================================================
--- trunk/Source/StructureMap/Emitting/ClassBuilder.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap/Emitting/ClassBuilder.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -83,31 +83,6 @@
ilgen.Emit(OpCodes.Ret);
}
-
- public void AddReadonlyStringProperty(string propertyName, string propertyValue, bool @override)
- {
- PropertyBuilder prop =
- _newTypeBuilder.DefineProperty(propertyName, PropertyAttributes.HasDefault, typeof (string), null);
-
- MethodAttributes atts = MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig |
- MethodAttributes.Final | MethodAttributes.SpecialName;
-
- string getterMethodName = "get_" + propertyName;
-
- MethodBuilder methodGet =
- _newTypeBuilder.DefineMethod(getterMethodName, atts, CallingConventions.Standard, typeof (string), null);
- ILGenerator gen = methodGet.GetILGenerator();
-
- LocalBuilder ilReturn = gen.DeclareLocal(typeof (string));
-
- gen.Emit(OpCodes.Ldstr, propertyValue);
- gen.Emit(OpCodes.Stloc_0);
- gen.Emit(OpCodes.Ldloc_0);
- gen.Emit(OpCodes.Ret);
-
- prop.SetGetMethod(methodGet);
- }
-
public void AddPluggedTypeGetter(Type pluggedType)
{
PropertyBuilder prop =
Modified: trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs
===================================================================
--- trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap/Emitting/InstanceBuilderAssembly.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -94,7 +94,6 @@
private void configureClassBuilder(ClassBuilder builderClass, Plugin plugin)
{
- builderClass.AddReadonlyStringProperty("ConcreteTypeKey", plugin.ConcreteKey, true);
builderClass.AddPluggedTypeGetter(plugin.PluggedType);
BuildInstanceMethod method = new BuildInstanceMethod(plugin);
Modified: trunk/Source/StructureMap/InstanceBuilder.cs
===================================================================
--- trunk/Source/StructureMap/InstanceBuilder.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap/InstanceBuilder.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -15,8 +15,6 @@
{
}
- public abstract string ConcreteTypeKey { get; }
-
public abstract Type PluggedType { get; }
public abstract object BuildInstance(IConfiguredInstance instance, IBuildSession session);
Modified: trunk/Source/StructureMap/InstanceBuilderList.cs
===================================================================
--- trunk/Source/StructureMap/InstanceBuilderList.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap/InstanceBuilderList.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -9,6 +9,7 @@
{
private readonly Dictionary<Type, InstanceBuilder> _builders = new Dictionary<Type, InstanceBuilder>();
private readonly Type _pluginType;
+ private readonly Dictionary<string, Type> _aliases = new Dictionary<string, Type>();
public InstanceBuilderList(Type pluginType, IEnumerable<Plugin> plugins)
@@ -17,7 +18,17 @@
processPlugins(plugins);
}
+ public InstanceBuilderList(Type pluginType)
+ {
+ _pluginType = pluginType;
+ }
+ public int BuilderCount
+ {
+ get { return _builders.Count; }
+ }
+
+
public InstanceBuilder FindByType(Type pluggedType)
{
if (pluggedType == null)
@@ -34,7 +45,7 @@
if (TypeRules.CanBeCast(_pluginType, pluggedType))
{
Plugin plugin = new Plugin(pluggedType);
- processPlugins(new Plugin[] {plugin});
+ processPlugin(plugin);
return _builders[pluggedType];
}
@@ -44,24 +55,32 @@
public InstanceBuilder FindByConcreteKey(string concreteKey)
{
- foreach (KeyValuePair<Type, InstanceBuilder> pair in _builders)
+ if (_aliases.ContainsKey(concreteKey))
{
- if (pair.Value.ConcreteTypeKey == concreteKey)
- {
- return pair.Value;
- }
+ Type pluggedType = _aliases[concreteKey];
+ return FindByType(pluggedType);
}
return null;
}
- public void Add(Type pluggedType, InstanceBuilder builder)
+ private void processPlugin(Plugin plugin)
{
- _builders.Add(pluggedType, builder);
+ processPlugins(new Plugin[] { plugin });
}
private void processPlugins(IEnumerable<Plugin> plugins)
{
+ foreach (Plugin plugin in plugins)
+ {
+ if (_aliases.ContainsKey(plugin.ConcreteKey))
+ {
+ continue;
+ }
+
+ _aliases.Add(plugin.ConcreteKey, plugin.PluggedType);
+ }
+
List<InstanceBuilder> list = createInstanceBuilders(plugins);
foreach (InstanceBuilder builder in list)
{
@@ -71,8 +90,27 @@
private List<InstanceBuilder> createInstanceBuilders(IEnumerable<Plugin> plugins)
{
- InstanceBuilderAssembly builderAssembly = new InstanceBuilderAssembly(_pluginType, plugins);
+ List<Plugin> list = new List<Plugin>();
+ foreach (Plugin plugin in plugins)
+ {
+ if (!_builders.ContainsKey(plugin.PluggedType))
+ {
+ list.Add(plugin);
+ }
+ }
+
+ InstanceBuilderAssembly builderAssembly = new InstanceBuilderAssembly(_pluginType, list);
return builderAssembly.Compile();
}
+
+ public void Add(Plugin plugin)
+ {
+ Add(new Plugin[] {plugin});
+ }
+
+ public void Add(IEnumerable<Plugin> plugins)
+ {
+ processPlugins(plugins);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -18,6 +18,11 @@
#region constructor functions
+ public InstanceFactory(Type pluginType) : this(new PluginFamily(pluginType))
+ {
+
+ }
+
/// <summary>
/// Constructor to use when troubleshooting possible configuration issues.
/// </summary>
@@ -107,11 +112,10 @@
}
- public Instance AddType<T>()
+ [Obsolete] public Instance AddType<T>()
{
InstanceBuilder builder = _instanceBuilders.FindByType(typeof (T));
- ConfiguredInstance instance = new ConfiguredInstance();
- instance.WithConcreteKey(builder.ConcreteTypeKey).WithName(builder.ConcreteTypeKey);
+ ConfiguredInstance instance = new ConfiguredInstance(typeof(T)).WithName(TypePath.GetAssemblyQualifiedName(typeof(T)));
AddInstance(instance);
@@ -147,5 +151,14 @@
}
#endregion
+
+ public void Merge(PluginFamily family)
+ {
+ _instanceBuilders.Add(family.Plugins);
+ foreach (Instance instance in family.GetAllInstances())
+ {
+ AddInstance(instance);
+ }
+ }
}
}
\ No newline at end of file
Deleted: trunk/Source/StructureMap/InstanceManager.cs
===================================================================
--- trunk/Source/StructureMap/InstanceManager.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap/InstanceManager.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -1,291 +0,0 @@
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Text;
-using StructureMap.Configuration.DSL;
-using StructureMap.Diagnostics;
-using StructureMap.Graph;
-using StructureMap.Interceptors;
-using StructureMap.Pipeline;
-
-namespace StructureMap
-{
- /// <summary>
- /// A collection of IInstanceFactory's.
- /// </summary>
- public class InstanceManager : TypeRules, IContainer
- {
- private InterceptorLibrary _interceptorLibrary;
- private PipelineGraph _pipelineGraph;
-
- public InstanceManager(Action<Registry> action)
- {
- Registry registry = new Registry();
- action(registry);
-
- construct(registry.Build());
- }
-
- public InstanceManager(Registry registry) : this(registry.Build())
- {
- }
-
- public InstanceManager() : this(new PluginGraph())
- {
- }
-
- /// <summary>
- /// Constructor to create an InstanceManager
- /// </summary>
- /// <param name="pluginGraph">PluginGraph containing the instance and type definitions
- /// for the InstanceManager</param>
- /// <param name="failOnException">Flags the InstanceManager to fail or trap exceptions</param>
- public InstanceManager(PluginGraph pluginGraph)
- {
- construct(pluginGraph);
- }
-
- private void construct(PluginGraph pluginGraph)
- {
- _interceptorLibrary = pluginGraph.InterceptorLibrary;
-
- if (!pluginGraph.IsSealed)
- {
- pluginGraph.Seal();
- }
-
- pluginGraph.Log.AssertFailures();
-
- _pipelineGraph = new PipelineGraph(pluginGraph);
- }
-
- protected MissingFactoryFunction onMissingFactory
- {
- set { _pipelineGraph.OnMissingFactory = value; }
- }
-
- #region IContainer Members
-
- public T GetInstance<T>(string instanceKey)
- {
- return (T) GetInstance(typeof (T), instanceKey);
- }
-
- public T GetInstance<T>(Instance instance)
- {
- return (T) GetInstance(typeof (T), instance);
- }
-
- public PLUGINTYPE GetInstance<PLUGINTYPE>(ExplicitArguments args)
- {
- Instance defaultInstance = _pipelineGraph.GetDefault(typeof (PLUGINTYPE));
-
- ExplicitInstance<PLUGINTYPE> instance = new ExplicitInstance<PLUGINTYPE>(args, defaultInstance);
- return GetInstance<PLUGINTYPE>(instance);
- }
-
- public void Inject<PLUGINTYPE>(PLUGINTYPE instance)
- {
- _pipelineGraph.Inject(instance);
- }
-
- public void InjectByName<PLUGINTYPE>(PLUGINTYPE instance, string instanceKey)
- {
- LiteralInstance literalInstance = new LiteralInstance(instance);
- literalInstance.Name = instanceKey;
-
- AddInstance<PLUGINTYPE>(literalInstance);
- }
-
- public void InjectByName<PLUGINTYPE, CONCRETETYPE>(string instanceKey)
- {
- ConfiguredInstance instance = new ConfiguredInstance(typeof(CONCRETETYPE));
- instance.Name = instanceKey;
-
- AddInstance<PLUGINTYPE>(instance);
- }
-
- public T GetInstance<T>()
- {
- return (T) GetInstance(typeof (T));
- }
-
- public T FillDependencies<T>()
- {
- return (T) FillDependencies(typeof (T));
- }
-
- public void InjectStub<T>(T instance)
- {
- InjectStub(typeof (T), instance);
- }
-
- public IList<T> GetAllInstances<T>()
- {
- List<T> list = new List<T>();
-
- IBuildSession session = withNewSession();
-
- foreach (T instance in forType(typeof (T)).GetAllInstances(session))
- {
- list.Add(instance);
- }
-
- return list;
- }
-
- public void SetDefaultsToProfile(string profile)
- {
- _pipelineGraph.CurrentProfile = profile;
- }
-
- /// <summary>
- /// Creates the named instance of the PluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="instanceKey"></param>
- /// <returns></returns>
- public object GetInstance(Type pluginType, string instanceKey)
- {
- return withNewSession().CreateInstance(pluginType, instanceKey);
- }
-
-
- /// <summary>
- /// Creates a new object instance of the requested type
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- public object GetInstance(Type pluginType)
- {
- return withNewSession().CreateInstance(pluginType);
- }
-
-
- /// <summary>
- /// Creates a new instance of the requested type using the InstanceMemento. Mostly used from other
- /// classes to link children members
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="instance"></param>
- /// <returns></returns>
- public object GetInstance(Type pluginType, Instance instance)
- {
- return withNewSession().CreateInstance(pluginType, instance);
- }
-
- /// <summary>
- /// Sets the default instance for the PluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="instance"></param>
- public void SetDefault(Type pluginType, Instance instance)
- {
- _pipelineGraph.SetDefault(pluginType, instance);
- }
-
- /// <summary>
- /// Sets the default instance for the PluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="instanceKey"></param>
- public void SetDefault(Type pluginType, string instanceKey)
- {
- ReferencedInstance reference = new ReferencedInstance(instanceKey);
- _pipelineGraph.SetDefault(pluginType, reference);
- }
-
-
- /// <summary>
- /// Attempts to create a new instance of the requested type. Automatically inserts the default
- /// configured instance for each dependency in the StructureMap constructor function.
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- public object FillDependencies(Type type)
- {
- if (!IsConcrete(type))
- {
- throw new StructureMapException(230, type.FullName);
- }
-
- Plugin plugin = new Plugin(type);
- if (!plugin.CanBeAutoFilled)
- {
- throw new StructureMapException(230, type.FullName);
- }
-
- return GetInstance(type);
- }
-
- /// <summary>
- /// Sets up the InstanceManager to return the object in the "stub" argument anytime
- /// any instance of the PluginType is requested
- /// </summary>
- /// <param name="pluginType"></param>
- /// <param name="stub"></param>
- public void InjectStub(Type pluginType, object stub)
- {
- if (!CanBeCast(pluginType, stub.GetType()))
- {
- throw new StructureMapException(220, pluginType.FullName,
- stub.GetType().FullName);
- }
-
-
- LiteralInstance instance = new LiteralInstance(stub);
- _pipelineGraph.SetDefault(pluginType, instance);
- }
-
- public IList GetAllInstances(Type type)
- {
- return forType(type).GetAllInstances(withNewSession());
- }
-
- public void AddInstance<T>(Instance instance)
- {
- _pipelineGraph.AddInstance<T>(instance);
- }
-
- public void AddInstance<PLUGINTYPE, CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE
- {
- _pipelineGraph.AddInstance<PLUGINTYPE, CONCRETETYPE>();
- }
-
- public void AddDefaultInstance<PLUGINTYPE, CONCRETETYPE>()
- {
- _pipelineGraph.AddDefaultInstance<PLUGINTYPE, CONCRETETYPE>();
- }
-
- public string WhatDoIHave()
- {
- WhatDoIHaveWriter writer = new WhatDoIHaveWriter(_pipelineGraph);
- return writer.GetText();
- }
-
- public ExplicitArgsExpression With<T>(T arg)
- {
- return new ExplicitArgsExpression(this).With<T>(arg);
- }
-
- public IExplicitProperty With(string argName)
- {
- return new ExplicitArgsExpression(this).With(argName);
- }
-
- #endregion
-
- private IBuildSession withNewSession()
- {
- return new BuildSession(_pipelineGraph, _interceptorLibrary);
- }
-
-
- protected IInstanceFactory forType(Type type)
- {
- return _pipelineGraph.ForType(type);
- }
-
- }
-}
\ No newline at end of file
Added: trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs (rev 0)
+++ trunk/Source/StructureMap.AutoMocking/AutoMockedContainer.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -0,0 +1,33 @@
+using System;
+using StructureMap.Graph;
+using StructureMap.Pipeline;
+
+namespace StructureMap.AutoMocking
+{
+ public class AutoMockedContainer : Container
+ {
+ private readonly ServiceLocator _locator;
+
+ public AutoMockedContainer(ServiceLocator locator)
+ {
+ _locator = locator;
+
+ onMissingFactory = delegate(Type pluginType, ProfileManager profileManager)
+ {
+ if (!pluginType.IsAbstract && pluginType.IsClass)
+ {
+ return null;
+ }
+
+ object service = _locator.Service(pluginType);
+ InstanceFactory factory = new InstanceFactory(new PluginFamily(pluginType));
+
+ LiteralInstance instance = new LiteralInstance(service);
+
+ profileManager.SetDefault(pluginType, instance);
+
+ return factory;
+ };
+ }
+ }
+}
\ No newline at end of file
Deleted: trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.AutoMocking/AutoMockedInstanceManager.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -1,34 +0,0 @@
-using System;
-using StructureMap.Graph;
-using StructureMap.Pipeline;
-
-namespace StructureMap.AutoMocking
-{
- public class AutoMockedInstanceManager : Container
- {
- private readonly ServiceLocator _locator;
-
- public AutoMockedInstanceManager(ServiceLocator locator)
- {
- _locator = locator;
-
- onMissingFactory = delegate(Type pluginType, ProfileManager profileManager)
- {
- if (!pluginType.IsAbstract && pluginType.IsClass)
- {
- return null;
- }
-
- object service = _locator.Service(pluginType);
- InstanceFactory factory = new InstanceFactory(new PluginFamily(pluginType));
-
- LiteralInstance instance = new LiteralInstance(service);
-
- profileManager.SetDefault(pluginType, instance);
-
- return factory;
- };
- }
-
- }
-}
\ No newline at end of file
Modified: trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs
===================================================================
--- trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.AutoMocking/RhinoAutoMocker.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -13,13 +13,13 @@
// Note that it subclasses the RhinoMocks.MockRepository class
public class RhinoAutoMocker<TARGETCLASS> : MockRepository where TARGETCLASS : class
{
- private readonly AutoMockedInstanceManager _manager;
+ private readonly AutoMockedContainer _manager;
private TARGETCLASS _classUnderTest;
public RhinoAutoMocker()
{
RhinoMocksServiceLocator locator = new RhinoMocksServiceLocator(this);
- _manager = new AutoMockedInstanceManager(locator);
+ _manager = new AutoMockedContainer(locator);
}
// Replaces the inner Container in ObjectFactory with the mocked
Modified: trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj
===================================================================
--- trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.AutoMocking/StructureMap.AutoMocking.csproj 2008-05-28 15:50:14 UTC (rev 109)
@@ -42,7 +42,7 @@
<Compile Include="..\CommonAssemblyInfo.cs">
<Link>CommonAssemblyInfo.cs</Link>
</Compile>
- <Compile Include="AutoMockedInstanceManager.cs" />
+ <Compile Include="AutoMockedContainer.cs" />
<Compile Include="IntegrationSpecification.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="RhinoAutoMocker.cs" />
Modified: trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing/AutoMocking/RhinoAutoMockerTester.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -16,14 +16,14 @@
{
_mocks = new MockRepository();
_locator = new RhinoMocksServiceLocator(_mocks);
- _instanceManager = new AutoMockedInstanceManager(_locator);
+ _container = new AutoMockedContainer(_locator);
}
#endregion
private MockRepository _mocks;
private RhinoMocksServiceLocator _locator;
- private AutoMockedInstanceManager _instanceManager;
+ private AutoMockedContainer _container;
public class ConcreteThing
@@ -132,11 +132,11 @@
[Test]
public void AutoFillAConcreteClassWithMocks()
{
- IMockedService service = _instanceManager.GetInstance<IMockedService>();
- IMockedService2 service2 = _instanceManager.GetInstance<IMockedService2>();
- IMockedService3 service3 = _instanceManager.GetInstance<IMockedService3>();
+ IMockedService service = _container.GetInstance<IMockedService>();
+ IMockedService2 service2 = _container.GetInstance<IMockedService2>();
+ IMockedService3 service3 = _container.GetInstance<IMockedService3>();
- ConcreteClass concreteClass = _instanceManager.FillDependencies<ConcreteClass>();
+ ConcreteClass concreteClass = _container.FillDependencies<ConcreteClass>();
Assert.AreSame(service, concreteClass.Service);
Assert.AreSame(service2, concreteClass.Service2);
@@ -146,7 +146,7 @@
[Test]
public void GetAFullMockForAServiceThatHasNotPreviouslyBeenRequested()
{
- IMockedService service = _instanceManager.GetInstance<IMockedService>();
+ IMockedService service = _container.GetInstance<IMockedService>();
Assert.IsNotNull(service);
@@ -169,21 +169,21 @@
public void InjectAStubAndGetTheStubBack()
{
StubService stub = new StubService();
- _instanceManager.InjectStub<IMockedService>(stub);
+ _container.InjectStub<IMockedService>(stub);
- Assert.AreSame(stub, _instanceManager.GetInstance<IMockedService>());
- Assert.AreSame(stub, _instanceManager.GetInstance<IMockedService>());
- Assert.AreSame(stub, _instanceManager.GetInstance<IMockedService>());
+ Assert.AreSame(stub, _container.GetInstance<IMockedService>());
+ Assert.AreSame(stub, _container.GetInstance<IMockedService>());
+ Assert.AreSame(stub, _container.GetInstance<IMockedService>());
}
[Test]
public void RequestTheServiceTwiceAndGetTheExactSameMockObject()
{
- IMockedService service = _instanceManager.GetInstance<IMockedService>();
- Assert.AreSame(service, _instanceManager.GetInstance<IMockedService>());
- Assert.AreSame(service, _instanceManager.GetInstance<IMockedService>());
- Assert.AreSame(service, _instanceManager.GetInstance<IMockedService>());
- Assert.AreSame(service, _instanceManager.GetInstance<IMockedService>());
+ IMockedService service = _container.GetInstance<IMockedService>();
+ Assert.AreSame(service, _container.GetInstance<IMockedService>());
+ Assert.AreSame(service, _container.GetInstance<IMockedService>());
+ Assert.AreSame(service, _container.GetInstance<IMockedService>());
+ Assert.AreSame(service, _container.GetInstance<IMockedService>());
}
[Test]
Modified: trunk/Source/StructureMap.Testing/Container/EmittingTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Container/EmittingTester.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing/Container/EmittingTester.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -73,12 +73,6 @@
}
[Test]
- public void ConcreteTypeKey()
- {
- Assert.AreEqual("Complex", builder.ConcreteTypeKey);
- }
-
- [Test]
public void DoubleProperty()
{
Assert.AreEqual(4, rule.Double);
Modified: trunk/Source/StructureMap.Testing/Container/InstanceFactoryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Container/InstanceFactoryTester.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing/Container/InstanceFactoryTester.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -61,9 +61,38 @@
Assert.IsNotNull(gateway);
}
+ [Test]
+ public void Import_from_family_picks_up_new_InstanceBuilders()
+ {
+ InstanceFactory factory = new InstanceFactory(typeof(IWidget));
+
+ PluginFamily family = new PluginFamily(typeof(IWidget));
+ family.AddPlugin(typeof (AWidget));
+ family.AddPlugin(typeof (ColorWidget));
+ factory.Merge(family);
+ InstanceBuilder builder = factory.FindBuilderByType(typeof (AWidget));
+ Assert.IsNotNull(builder);
+ builder = factory.FindBuilderByType(typeof(ColorWidget));
+ Assert.IsNotNull(builder);
+ }
+ [Test]
+ public void Import_from_family_picks_up_new_instances()
+ {
+ InstanceFactory factory = new InstanceFactory(typeof(IWidget));
+ PluginFamily family = new PluginFamily(typeof(IWidget));
+ family.AddInstance(new LiteralInstance(new AWidget()).WithName("New"));
+ family.AddInstance(new LiteralInstance(new AWidget()).WithName("New2"));
+ family.AddInstance(new LiteralInstance(new AWidget()).WithName("New3"));
+
+ factory.Merge(family);
+
+ Assert.IsNotNull(factory.FindInstance("New"));
+ Assert.IsNotNull(factory.FindInstance("New2"));
+ Assert.IsNotNull(factory.FindInstance("New3"));
+ }
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/InstanceBuilderListTester.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -0,0 +1,68 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+using StructureMap.Graph;
+using StructureMap.Testing.Widget;
+
+namespace StructureMap.Testing
+{
+ [TestFixture]
+ public class InstanceBuilderListTester
+ {
+ [Test]
+ public void InstanceBuilderList_add_a_new_InstanceBuilder_if_the_new_Plugin_is_not_recognized()
+ {
+ InstanceBuilderList list = new InstanceBuilderList(typeof(IWidget));
+ Assert.AreEqual(0, list.BuilderCount);
+
+ Plugin plugin = new Plugin(typeof(AWidget));
+ list.Add(plugin);
+
+ Assert.AreEqual(1, list.BuilderCount);
+ InstanceBuilder builder = list.FindByType(typeof(AWidget));
+
+ Assert.IsNotNull(builder);
+ }
+
+ [Test]
+ public void InstanceBuilderList_should_not_add_a_new_InstanceBuilder_if_the_same_one_exists()
+ {
+ InstanceBuilderList list = new InstanceBuilderList(typeof(IWidget));
+ Plugin plugin = new Plugin(typeof(AWidget));
+ list.Add(plugin);
+ list.Add(plugin);
+
+ Assert.AreEqual(1, list.BuilderCount);
+ }
+
+ [Test]
+ public void Do_not_add_a_new_InstanceBuilder_for_the_same_plugged_type_but_different_concrete_key()
+ {
+ InstanceBuilderList list = new InstanceBuilderList(typeof(IWidget));
+ Plugin plugin = new Plugin(typeof(AWidget));
+ list.Add(plugin);
+
+ Plugin plugin2 = new Plugin(typeof(AWidget), "DifferentKey");
+ list.Add(plugin2);
+
+ Assert.AreEqual(1, list.BuilderCount);
+ }
+
+ [Test]
+ public void Find_the_InstanceBuilder_by_concrete_key_with_different_aliased_concrete_keys()
+ {
+ InstanceBuilderList list = new InstanceBuilderList(typeof(IWidget));
+ Plugin plugin = new Plugin(typeof(AWidget));
+ list.Add(plugin);
+
+ Plugin plugin2 = new Plugin(typeof(AWidget), "DifferentKey");
+ list.Add(plugin2);
+
+ InstanceBuilder builder1 = list.FindByConcreteKey(plugin.ConcreteKey);
+ InstanceBuilder builder2 = list.FindByConcreteKey(plugin2.ConcreteKey);
+
+ Assert.AreSame(builder1, builder2);
+ }
+ }
+}
Added: trunk/Source/StructureMap.Testing/MergingTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/MergingTester.cs (rev 0)
+++ trunk/Source/StructureMap.Testing/MergingTester.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using NUnit.Framework;
+using StructureMap.Graph;
+using StructureMap.Testing.Widget;
+
+namespace StructureMap.Testing
+{
+ [TestFixture]
+ public class MergingTester
+ {
+
+
+
+ }
+}
Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj
===================================================================
--- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2008-05-28 15:50:14 UTC (rev 109)
@@ -315,8 +315,10 @@
</Compile>
<Compile Include="Graph\TypePathTester.cs" />
<Compile Include="ImplicitPluginFromPluggedTypeAttributeTester.cs" />
+ <Compile Include="InstanceBuilderListTester.cs" />
<Compile Include="InstanceMementoInstanceCreationTester.cs" />
<Compile Include="MementoTester.cs" />
+ <Compile Include="MergingTester.cs" />
<Compile Include="ObjectFactoryTester.cs">
<SubType>Code</SubType>
</Compile>
Modified: trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing.Widget/ArrayConstruction.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -51,14 +51,6 @@
public class StringListBuilder : InstanceBuilder
{
-
- public override string ConcreteTypeKey
- {
- get { return null; }
- }
-
-
-
public override object BuildInstance(IConfiguredInstance instance, StructureMap.Pipeline.IBuildSession session)
{
return null;
Modified: trunk/Source/StructureMap.Testing.Widget/Decision.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/Decision.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing.Widget/Decision.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -16,11 +16,6 @@
public class DecisionBuilder : InstanceBuilder
{
- public override string ConcreteTypeKey
- {
- get { return null; }
- }
-
public override object BuildInstance(IConfiguredInstance instance, StructureMap.Pipeline.IBuildSession session)
{
return new Decision(
Modified: trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing.Widget/Hierarchy.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -92,11 +92,6 @@
public class ChildLoaderTemplate : InstanceBuilder
{
- public override string ConcreteTypeKey
- {
- get { return null; }
- }
-
public override Type PluggedType
{
get { throw new NotImplementedException(); }
Modified: trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing.Widget2/EnumerationCheck.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -28,11 +28,6 @@
public class CowBuilder : InstanceBuilder
{
- public override string ConcreteTypeKey
- {
- get { return "Default"; }
- }
-
public Type ThePluginType
{
get
Modified: trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs
===================================================================
--- trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs 2008-05-28 04:02:54 UTC (rev 108)
+++ trunk/Source/StructureMap.Testing.Widget5/BasicGridColumnInstanceBuilder.cs 2008-05-28 15:50:14 UTC (rev 109)
@@ -13,12 +13,6 @@
{
}
-
- public override string ConcreteTypeKey
- {
- get { throw new NotImplementedException(); }
- }
-
public override Type PluggedType
{
get { throw new NotImplementedException(); }
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|