From: <jer...@us...> - 2008-12-19 19:04:51
|
Revision: 203 http://structuremap.svn.sourceforge.net/structuremap/?rev=203&view=rev Author: jeremydmiller Date: 2008-12-19 19:04:47 +0000 (Fri, 19 Dec 2008) Log Message: ----------- fixing a bug reported in: http://groups.google.com/group/structuremap-users/browse_thread/thread/1ab08ef6c3ac6bf1?hl=en Modified Paths: -------------- trunk/Source/StructureMap/Container.cs trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs Modified: trunk/Source/StructureMap/Container.cs =================================================================== --- trunk/Source/StructureMap/Container.cs 2008-12-19 15:46:37 UTC (rev 202) +++ trunk/Source/StructureMap/Container.cs 2008-12-19 19:04:47 UTC (rev 203) @@ -109,7 +109,9 @@ { Instance defaultInstance = _pipelineGraph.GetDefault(pluginType); - Instance instance = new ExplicitInstance(pluginType, args, defaultInstance); + BasicInstance basicInstance = defaultInstance as BasicInstance; + + Instance instance = basicInstance == null ? defaultInstance : new ExplicitInstance(pluginType, args, basicInstance); BuildSession session = withNewSession(); args.RegisterDefaults(session); Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2008-12-19 15:46:37 UTC (rev 202) +++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2008-12-19 19:04:47 UTC (rev 203) @@ -4,7 +4,7 @@ namespace StructureMap.Pipeline { - public interface Copyable + public interface BasicInstance { Type PluggedType { get; } Dictionary<string, string> Properties { get; } @@ -13,7 +13,7 @@ } - public abstract class ConfiguredInstanceBase<T> : Instance, IConfiguredInstance, IStructuredInstance, Copyable + public abstract class ConfiguredInstanceBase<T> : Instance, IConfiguredInstance, IStructuredInstance, BasicInstance { protected Dictionary<string, Instance[]> _arrays = new Dictionary<string, Instance[]>(); protected Dictionary<string, Instance> _children = new Dictionary<string, Instance>(); @@ -42,22 +42,22 @@ #region Copyable Members - Type Copyable.PluggedType + Type BasicInstance.PluggedType { get { return _pluggedType; } } - Dictionary<string, string> Copyable.Properties + Dictionary<string, string> BasicInstance.Properties { get { return _properties; } } - Dictionary<string, Instance> Copyable.Children + Dictionary<string, Instance> BasicInstance.Children { get { return _children; } } - Dictionary<string, Instance[]> Copyable.Arrays + Dictionary<string, Instance[]> BasicInstance.Arrays { get { return _arrays; } } @@ -241,7 +241,7 @@ _properties[propertyName] = propertyValue; } - protected void mergeIntoThis(Copyable instance) + protected void mergeIntoThis(BasicInstance instance) { _pluggedType = instance.PluggedType; Modified: trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2008-12-19 15:46:37 UTC (rev 202) +++ trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2008-12-19 19:04:47 UTC (rev 203) @@ -76,20 +76,11 @@ { private readonly ExplicitArguments _args; - public ExplicitInstance(Type pluginType, ExplicitArguments args, Instance defaultInstance) : base(null) + public ExplicitInstance(Type pluginType, ExplicitArguments args, BasicInstance defaultInstance) : base(null) { args.Configure(this); _args = args; - - var defaultConfiguration = defaultInstance as Copyable; - if (defaultConfiguration != null) - { - mergeIntoThis(defaultConfiguration); - } - else - { - setPluggedType(pluginType); - } + mergeIntoThis(defaultInstance); } Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-12-19 15:46:37 UTC (rev 202) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-12-19 19:04:47 UTC (rev 203) @@ -40,7 +40,7 @@ { string theProfileName = "something"; - IContainer manager = new Container(registry => + IContainer container = new Container(registry => { registry.CreateProfile(theProfileName, x => { @@ -49,10 +49,10 @@ }); }); - manager.SetDefaultsToProfile(theProfileName); + container.SetDefaultsToProfile(theProfileName); - Assert.IsInstanceOfType(typeof(AWidget), manager.GetInstance<IWidget>()); - Assert.IsInstanceOfType(typeof(DefaultRule), manager.GetInstance<Rule>()); + Assert.IsInstanceOfType(typeof(AWidget), container.GetInstance<IWidget>()); + Assert.IsInstanceOfType(typeof(DefaultRule), container.GetInstance<Rule>()); } Modified: trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2008-12-19 15:46:37 UTC (rev 202) +++ trunk/Source/StructureMap.Testing/GenericsIntegrationTester.cs 2008-12-19 19:04:47 UTC (rev 203) @@ -1,5 +1,6 @@ using System.Collections; using NUnit.Framework; +using StructureMap.Configuration.DSL; using StructureMap.Graph; using StructureMap.Testing.GenericWidgets; using StructureMap.Testing.TestData; @@ -74,6 +75,20 @@ (IService<double>) manager.GetInstance(typeof (IService<double>), "Default"); } + + + + + + + + + + + + + + [Test] public void PicksUpAnExplicitlyDefinedGenericPluginFamilyFromConfiguration() { Modified: trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs =================================================================== --- trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs 2008-12-19 15:46:37 UTC (rev 202) +++ trunk/Source/StructureMap.Testing/Graph/TestExplicitArguments.cs 2008-12-19 19:04:47 UTC (rev 203) @@ -1,5 +1,7 @@ +using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics; using NUnit.Framework; using StructureMap.Pipeline; using StructureMap.Testing.Pipeline; @@ -96,13 +98,58 @@ } [Test] + public void use_a_type_that_is_not_part_of_the_constructor_in_the_with() + { + var container = new Container(); + container.With(new Address()).GetInstance<ClassWithNoArgs>() + .ShouldBeOfType<ClassWithNoArgs>(); + } + + [Test] + public void use_explicit_type_arguments_with_custom_instance() + { + var container = new Container(x => + { + x.ForRequestedType<ClassWithNoArgs>().TheDefault.IsThis(new SpecialInstance()); + }); + + Debug.WriteLine(container.WhatDoIHave()); + + var address = new Address(); + + + container.With(address).GetInstance<ClassWithNoArgs>() + .TheAddress.ShouldBeTheSameAs(address); + + } + + public class ClassWithNoArgs + { + public Address TheAddress { get; set;} + } + public class Address{} + + public class SpecialInstance : Instance + { + protected override string getDescription() + { + return string.Empty; + } + + protected override object build(Type pluginType, BuildSession session) + { + return new ClassWithNoArgs() {TheAddress = (Address)session.CreateInstance(typeof (Address))}; + } + } + + [Test] public void ExplicitArguments_can_return_child_by_name() { var args = new ExplicitArguments(); var theNode = new Node(); args.SetArg("node", theNode); - IConfiguredInstance instance = new ExplicitInstance(typeof (Command), args, null); + IConfiguredInstance instance = new ExplicitInstance(typeof (Command), args, new SmartInstance<Command>()); Assert.AreSame(theNode, instance.GetChild("node", typeof (Node), new StubBuildSession())); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |