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