|
From: <jer...@us...> - 2008-10-05 03:33:33
|
Revision: 174
http://structuremap.svn.sourceforge.net/structuremap/?rev=174&view=rev
Author: jeremydmiller
Date: 2008-10-05 03:29:12 +0000 (Sun, 05 Oct 2008)
Log Message:
-----------
convenience method for configuring Profiles
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2008-10-05 03:02:08 UTC (rev 173)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/ProfileExpression.cs 2008-10-05 03:29:12 UTC (rev 174)
@@ -3,6 +3,8 @@
namespace StructureMap.Configuration.DSL.Expressions
{
+
+
/// <summary>
/// Expression class to help define a runtime Profile
/// </summary>
@@ -28,6 +30,17 @@
return new InstanceDefaultExpression<T>(this);
}
+ public IsExpression<T> Type<T>()
+ {
+ return new InstanceExpression<T>(instance =>
+ {
+ _registry.addExpression(graph =>
+ {
+ graph.SetDefault(_profileName, typeof(T), instance);
+ });
+ });
+ }
+
/// <summary>
/// Use statement to define the Profile defaults for a Generic type
/// </summary>
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2008-10-05 03:02:08 UTC (rev 173)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2008-10-05 03:29:12 UTC (rev 174)
@@ -121,6 +121,12 @@
return expression;
}
+ public void CreateProfile(string profileName, Action<ProfileExpression> action)
+ {
+ var expression = new ProfileExpression(profileName, this);
+ action(expression);
+ }
+
public static bool IsPublicRegistry(Type type)
{
if (!typeof (Registry).IsAssignableFrom(type))
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2008-10-05 03:02:08 UTC (rev 173)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2008-10-05 03:29:12 UTC (rev 174)
@@ -89,6 +89,16 @@
return child;
}
+ public ChildInstanceExpression CtorDependency<CONSTRUCTORARGUMENTTYPE>(string propertyName)
+ {
+ return Child(propertyName);
+ }
+
+ public ChildInstanceExpression SetterDependency<CONSTRUCTORARGUMENTTYPE>(string propertyName)
+ {
+ return Child(propertyName);
+ }
+
/// <summary>
/// Start the definition of a primitive argument to a constructor argument
/// </summary>
@@ -99,6 +109,11 @@
return new PropertyExpression<ConfiguredInstance>(this, propertyName);
}
+ public PropertyExpression<ConfiguredInstance> WithCtorArg(string propertyName)
+ {
+ return new PropertyExpression<ConfiguredInstance>(this, propertyName);
+ }
+
#region Nested type: ChildArrayExpression
public class ChildArrayExpression
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-10-05 03:02:08 UTC (rev 173)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-10-05 03:29:12 UTC (rev 174)
@@ -34,7 +34,28 @@
Assert.IsInstanceOfType(typeof (DefaultRule), manager.GetInstance<Rule>());
}
+
[Test]
+ public void Add_default_instance_by_lambda2()
+ {
+ string theProfileName = "something";
+
+ IContainer manager = new Container(registry =>
+ {
+ registry.CreateProfile(theProfileName, x =>
+ {
+ x.Type<IWidget>().Is.ConstructedBy(() => new AWidget());
+ x.Type<Rule>().Is.ConstructedBy(() => new DefaultRule());
+ });
+ });
+
+ manager.SetDefaultsToProfile(theProfileName);
+
+ Assert.IsInstanceOfType(typeof(AWidget), manager.GetInstance<IWidget>());
+ Assert.IsInstanceOfType(typeof(DefaultRule), manager.GetInstance<Rule>());
+ }
+
+ [Test]
public void Add_default_instance_by_prototype()
{
string theProfileName = "something";
Modified: trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs 2008-10-05 03:02:08 UTC (rev 173)
+++ trunk/Source/StructureMap.Testing/ObjectFactoryInitializeTester.cs 2008-10-05 03:29:12 UTC (rev 174)
@@ -1,10 +1,22 @@
using NUnit.Framework;
+using StructureMap.Configuration.DSL;
using StructureMap.Testing.GenericWidgets;
using StructureMap.Testing.TestData;
+using StructureMap.Testing.Widget;
using StructureMap.Testing.Widget3;
+using StructureMap.Testing.Widget5;
namespace StructureMap.Testing
{
+ public class InitializeRegistry : Registry
+ {
+ public InitializeRegistry()
+ {
+ InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Green").WithName(
+ "Green");
+ }
+ }
+
[TestFixture]
public class ObjectFactoryInitializeTester
{
@@ -23,6 +35,18 @@
[Test]
+ public void Add_a_registry_by_generic_signature()
+ {
+ ObjectFactory.Initialize(x =>
+ {
+ x.IgnoreStructureMapConfig = true;
+ x.AddRegistry<InitializeRegistry>();
+ });
+
+ ObjectFactory.GetNamedInstance<IWidget>("Green").ShouldBeOfType<ColorWidget>().Color.ShouldEqual("Green");
+ }
+
+ [Test]
public void StructureMap_functions_without_StructureMapconfig_file_in_the_default_mode()
{
DataMother.RemoveStructureMapConfig();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|