From: <jer...@us...> - 2008-10-22 14:45:29
|
Revision: 191 http://structuremap.svn.sourceforge.net/structuremap/?rev=191&view=rev Author: jeremydmiller Date: 2008-10-22 14:45:15 +0000 (Wed, 22 Oct 2008) Log Message: ----------- fixing the HybridBuildPolicy and adding a method on ObjectFactory for pushing in a dictionary of arguments Modified Paths: -------------- trunk/Source/StructureMap/ObjectFactory.cs trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs trunk/Source/StructureMap.Testing/ObjectFactoryTester.cs trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj Added Paths: ----------- trunk/Source/StructureMap.Testing/Pipeline/HybridBuildPolicyTester.cs Modified: trunk/Source/StructureMap/ObjectFactory.cs =================================================================== --- trunk/Source/StructureMap/ObjectFactory.cs 2008-10-21 22:15:42 UTC (rev 190) +++ trunk/Source/StructureMap/ObjectFactory.cs 2008-10-22 14:45:15 UTC (rev 191) @@ -366,5 +366,10 @@ } #endregion + + public static T GetInstance<T>(ExplicitArguments args) + { + return container.GetInstance<T>(args); + } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2008-10-21 22:15:42 UTC (rev 190) +++ trunk/Source/StructureMap/Pipeline/ExplicitArguments.cs 2008-10-22 14:45:15 UTC (rev 191) @@ -5,10 +5,10 @@ { public class ExplicitArguments { - private readonly Dictionary<string, object> _args; - private readonly Dictionary<Type, object> _children = new Dictionary<Type, object>(); + private readonly IDictionary<string, object> _args; + private readonly IDictionary<Type, object> _children = new Dictionary<Type, object>(); - public ExplicitArguments(Dictionary<string, object> args) + public ExplicitArguments(IDictionary<string, object> args) { _args = args; } Modified: trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs 2008-10-21 22:15:42 UTC (rev 190) +++ trunk/Source/StructureMap/Pipeline/HybridBuildPolicy.cs 2008-10-22 14:45:15 UTC (rev 191) @@ -4,33 +4,35 @@ { public class HybridBuildPolicy : IBuildInterceptor { - private readonly IBuildInterceptor _innerInterceptor; + private IBuildPolicy _innerPolicy; - - public HybridBuildPolicy() + private IBuildInterceptor interceptor { - _innerInterceptor = HttpContextBuildPolicy.HasContext() - ? (IBuildInterceptor) new HttpContextBuildPolicy() - : new ThreadLocalStoragePolicy(); + get + { + return HttpContextBuildPolicy.HasContext() + ? (IBuildInterceptor)new HttpContextBuildPolicy(){InnerPolicy = _innerPolicy} + : new ThreadLocalStoragePolicy(){InnerPolicy = _innerPolicy}; + } } #region IBuildInterceptor Members public IBuildPolicy InnerPolicy { - get { return _innerInterceptor.InnerPolicy; } - set { _innerInterceptor.InnerPolicy = value; } + get { return _innerPolicy; } + set { _innerPolicy = value; } } public object Build(BuildSession buildSession, Type pluginType, Instance instance) { - return _innerInterceptor.Build(buildSession, pluginType, instance); + return interceptor.Build(buildSession, pluginType, instance); } public IBuildPolicy Clone() { var policy = new HybridBuildPolicy(); - policy.InnerPolicy = InnerPolicy.Clone(); + policy.InnerPolicy = _innerPolicy.Clone(); return policy; } Modified: trunk/Source/StructureMap.Testing/ObjectFactoryTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/ObjectFactoryTester.cs 2008-10-21 22:15:42 UTC (rev 190) +++ trunk/Source/StructureMap.Testing/ObjectFactoryTester.cs 2008-10-22 14:45:15 UTC (rev 191) @@ -2,6 +2,8 @@ using System.Diagnostics; using System.Linq; using NUnit.Framework; +using StructureMap.Pipeline; +using StructureMap.Testing.Graph; using StructureMap.Testing.TestData; using StructureMap.Testing.Widget; using IList=System.Collections.IList; @@ -22,7 +24,30 @@ #endregion + [Test] + public void Pass_in_arguments_as_dictionary() + { + ObjectFactory.Initialize(x => + { + x.ForRequestedType<IView>().TheDefaultIsConcreteType<View>(); + }); + + var theNode = new Node(); + var theTrade = new Trade(); + + var args = new ExplicitArguments(); + args.Set(theNode); + args.SetArg("trade", theTrade); + + var command = ObjectFactory.GetInstance<Command>(args); + + Assert.IsInstanceOfType(typeof(View), command.View); + Assert.AreSame(theNode, command.Node); + Assert.AreSame(theTrade, command.Trade); + } + + [Test] public void SmokeTestGetAllInstances() { IList list = ObjectFactory.GetAllInstances(typeof (GrandChild)); Modified: trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs 2008-10-21 22:15:42 UTC (rev 190) +++ trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs 2008-10-22 14:45:15 UTC (rev 191) @@ -85,7 +85,7 @@ [Test] public void CloneHybrid() { - var policy = new HybridBuildPolicy(); + var policy = new HybridBuildPolicy(){InnerPolicy = new BuildPolicy()}; var clone = (HybridBuildPolicy) policy.Clone(); Assert.AreNotSame(policy, clone); Added: trunk/Source/StructureMap.Testing/Pipeline/HybridBuildPolicyTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Pipeline/HybridBuildPolicyTester.cs (rev 0) +++ trunk/Source/StructureMap.Testing/Pipeline/HybridBuildPolicyTester.cs 2008-10-22 14:45:15 UTC (rev 191) @@ -0,0 +1,35 @@ +using System; +using System.IO; +using System.Text; +using System.Web; +using System.Web.Hosting; +using NUnit.Framework; +using StructureMap.Pipeline; +using StructureMap.Testing.DocumentationExamples; +using StructureMap.Testing.Widget3; + +namespace StructureMap.Testing.Pipeline +{ + [TestFixture] + public class HybridBuildPolicyTester + { + [Test] + public void run_without_an_httpcontext() + { + var policy = new HybridBuildPolicy(){InnerPolicy = new BuildPolicy()}; + var instance = new SmartInstance<RemoteService>(); + var object1 = policy.Build(new BuildSession(), typeof (IService), instance); + var object2 = policy.Build(new BuildSession(), typeof(IService), instance); + var object3 = policy.Build(new BuildSession(), typeof(IService), instance); + + object1.ShouldNotBeNull(); + object2.ShouldNotBeNull(); + object3.ShouldNotBeNull(); + + object1.ShouldBeTheSameAs(object2).ShouldBeTheSameAs(object3); + } + + } + + +} \ No newline at end of file Modified: trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj =================================================================== --- trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2008-10-21 22:15:42 UTC (rev 190) +++ trunk/Source/StructureMap.Testing/StructureMap.Testing.csproj 2008-10-22 14:45:15 UTC (rev 191) @@ -110,6 +110,7 @@ <Name>System.Data</Name> </Reference> <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> <Reference Include="System.Web.Services" /> <Reference Include="System.Windows.Forms"> <Name>System.Windows.Forms</Name> @@ -322,6 +323,7 @@ <Compile Include="Pipeline\ConfiguredInstanceTester.cs" /> <Compile Include="Pipeline\ConstructorInstanceTester.cs" /> <Compile Include="Pipeline\DefaultInstanceTester.cs" /> + <Compile Include="Pipeline\HybridBuildPolicyTester.cs" /> <Compile Include="Pipeline\InstanceTester.cs" /> <Compile Include="Pipeline\LiteralInstanceTester.cs" /> <Compile Include="Pipeline\OptionalSetterInjectionTester.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |