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