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