From: <jer...@us...> - 2008-10-05 02:32:37
|
Revision: 169 http://structuremap.svn.sourceforge.net/structuremap/?rev=169&view=rev Author: jeremydmiller Date: 2008-10-05 02:29:44 +0000 (Sun, 05 Oct 2008) Log Message: ----------- eliminating some obsolete methods from the DSL, adding ability to configure generics instances from DSL Modified Paths: -------------- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs trunk/Source/StructureMap/Configuration/DSL/Registry.cs trunk/Source/StructureMap/StructureMapConfiguration.cs trunk/Source/StructureMap.Testing/BuildSessionTester.cs trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -15,7 +15,6 @@ private readonly List<Action<PluginFamily>> _alterations = new List<Action<PluginFamily>>(); private readonly List<Action<PluginGraph>> _children = new List<Action<PluginGraph>>(); private readonly Type _pluginType; - private readonly InstanceScope _scope = InstanceScope.PerRequest; public CreatePluginFamilyExpression(Registry registry) { @@ -24,18 +23,22 @@ registry.addExpression(graph => { PluginFamily family = graph.FindFamily(_pluginType); - family.SetScopeTo(_scope); _children.ForEach(action => action(graph)); _alterations.ForEach(action => action(family)); }); } + public IsExpression<PLUGINTYPE> TheDefault + { + get { return new InstanceExpression<PLUGINTYPE>(i => registerDefault(i)); } + } + public CreatePluginFamilyExpression<PLUGINTYPE> AddInstances(Action<InstanceExpression<PLUGINTYPE>> action) { - List<Instance> list = new List<Instance>(); + var list = new List<Instance>(); - InstanceExpression<PLUGINTYPE> child = new InstanceExpression<PLUGINTYPE>(i => list.Add(i)); + var child = new InstanceExpression<PLUGINTYPE>(i => list.Add(i)); action(child); return alterAndContinue(family => @@ -55,25 +58,6 @@ } /// <summary> - /// Sets the default instance of a Type to the definition represented by builder - /// </summary> - /// <param name="builder"></param> - /// <returns></returns> - public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIs(Instance instance) - { - return alterAndContinue(family => - { - family.AddInstance(instance); - family.DefaultInstanceKey = instance.Name; - }); - } - - public CreatePluginFamilyExpression<PLUGINTYPE> AddInstance(Instance instance) - { - return alterAndContinue(family => family.AddInstance(instance)); - } - - /// <summary> /// Convenience method that sets the default concrete type of the PluginType. Type T /// can only accept types that do not have any primitive constructor arguments. /// StructureMap has to know how to construct all of the constructor argument types. @@ -83,13 +67,14 @@ public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIsConcreteType<CONCRETETYPE>() where CONCRETETYPE : PLUGINTYPE { - var concreteType = typeof(CONCRETETYPE); + Type concreteType = typeof (CONCRETETYPE); ExpressionValidator.ValidatePluggabilityOf(concreteType).IntoPluginType(_pluginType); return alterAndContinue(family => { - ConfiguredInstance instance = new ConfiguredInstance(concreteType).WithName(concreteType.AssemblyQualifiedName); + ConfiguredInstance instance = + new ConfiguredInstance(concreteType).WithName(concreteType.AssemblyQualifiedName); family.AddInstance(instance); family.DefaultInstanceKey = instance.Name; }); @@ -130,7 +115,7 @@ return target; }; - PluginTypeInterceptor interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE), function); + var interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE), function); graph.InterceptorLibrary.AddInterceptor(interceptor); }); @@ -144,7 +129,7 @@ { Func<object, object> function = target => handler((PLUGINTYPE) target); - PluginTypeInterceptor interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE), function); + var interceptor = new PluginTypeInterceptor(typeof (PLUGINTYPE), function); graph.InterceptorLibrary.AddInterceptor(interceptor); }); @@ -157,7 +142,7 @@ _alterations.Add(family => { string name = PluginCache.GetPlugin(typeof (PLUGGEDTYPE)).ConcreteKey; - var instance = new SmartInstance<PLUGGEDTYPE>().WithName(name); + SmartInstance<PLUGGEDTYPE> instance = new SmartInstance<PLUGGEDTYPE>().WithName(name); family.AddInstance(instance); }); @@ -177,12 +162,13 @@ return this; } - public IsExpression<PLUGINTYPE> TheDefault + private void registerDefault(Instance instance) { - get + _alterations.Add(family => { - return new InstanceExpression<PLUGINTYPE>(i => TheDefaultIs(i)); - } + family.AddInstance(instance); + family.DefaultInstanceKey = instance.Name; + }); } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap/Configuration/DSL/Expressions/GenericFamilyExpression.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -53,7 +53,7 @@ } - public GenericFamilyExpression AddInstance(Instance instance) + private GenericFamilyExpression add(Instance instance) { return alterAndContinue(family => family.AddInstance(instance)); } @@ -92,12 +92,12 @@ public GenericFamilyExpression AddConcreteType(Type concreteType) { - return AddInstance(new ConfiguredInstance(concreteType)); + return add(new ConfiguredInstance(concreteType)); } public GenericFamilyExpression AddConcreteType(Type concreteType, string instanceName) { - return AddInstance(new ConfiguredInstance(concreteType).WithName(instanceName)); + return add(new ConfiguredInstance(concreteType).WithName(instanceName)); } } } \ No newline at end of file Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -10,6 +10,25 @@ LiteralInstance IsThis(T obj); } + public class GenericIsExpression + { + private readonly Action<Instance> _action; + + public GenericIsExpression(Action<Instance> action) + { + _action = action; + } + + + public ConfiguredInstance Is(Type concreteType) + { + var instance = new ConfiguredInstance(concreteType); + _action(instance); + + return instance; + } + } + public class InstanceExpression<T> : IsExpression<T> { private readonly Action<Instance> _action; Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs =================================================================== --- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -120,6 +120,17 @@ }); } + public GenericIsExpression InstanceOf(Type pluginType) + { + return new GenericIsExpression(instance => + { + _actions.Add(graph => + { + graph.FindFamily(pluginType).AddInstance(instance); + }); + }); + } + /// <summary> /// Starts the definition of a new Profile /// </summary> @@ -173,18 +184,6 @@ _actions.Add(graph => graph.AddScanner(scanner)); } - [Obsolete("Like to get rid of this")] - public void AddInstanceOf(Type pluginType, Instance instance) - { - _actions.Add(graph => graph.FindFamily(pluginType).AddInstance(instance)); - } - - [Obsolete("Like to get rid of this")] - public void AddInstanceOf<PLUGINTYPE>(Instance instance) - { - _actions.Add(graph => graph.FindFamily(typeof (PLUGINTYPE)).AddInstance(instance)); - } - public bool Equals(Registry obj) { if (ReferenceEquals(null, obj)) return false; Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs =================================================================== --- trunk/Source/StructureMap/StructureMapConfiguration.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -197,17 +197,7 @@ return registry.ForRequestedType(pluginType); } - public static void AddInstanceOf<T>(Func<T> func) - { - registry.AddInstanceOf<T>(new ConstructorInstance<T>(func)); - } - public static void AddInstanceOf<T>(Instance instance) - { - registry.ForRequestedType<T>().AddInstance(instance); - } - - /// <summary> /// Starts the definition of a configuration Profile. /// </summary> Modified: trunk/Source/StructureMap.Testing/BuildSessionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -126,7 +126,7 @@ return new ColorRule("Red"); }); Registry registry = new Registry(); - registry.ForRequestedType<ColorRule>().TheDefaultIs(instance); + registry.ForRequestedType<ColorRule>().TheDefault.IsThis(instance); PluginGraph graph = registry.Build(); BuildSession session = new BuildSession(graph); Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap.Testing/Configuration/DSL/ProfileExpressionTester.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -45,8 +45,8 @@ manager.SetDefaultsToProfile(theProfileName); - IWidget widget1 = manager.GetInstance<IWidget>(); - IWidget widget2 = manager.GetInstance<IWidget>(); + var widget1 = manager.GetInstance<IWidget>(); + var widget2 = manager.GetInstance<IWidget>(); Assert.IsNotNull(widget1); Assert.IsNotNull(widget2); @@ -70,15 +70,15 @@ [Test] public void Add_default_instance_with_literal() { - Registry registry = new Registry(); - AWidget theWidget = new AWidget(); + var registry = new Registry(); + var theWidget = new AWidget(); string theProfileName = "something"; registry.CreateProfile(theProfileName) .For<IWidget>().Use(theWidget); PluginGraph graph = registry.Build(); - LiteralInstance instance = (LiteralInstance) graph.ProfileManager.GetDefault(typeof (IWidget), "something"); + var instance = (LiteralInstance) graph.ProfileManager.GetDefault(typeof (IWidget), "something"); Assert.AreSame(theWidget, instance.Object); } @@ -89,12 +89,13 @@ string theProfileName = "TheProfile"; string theDefaultName = "TheDefaultName"; - Registry registry = new Registry(); + var registry = new Registry(); registry.CreateProfile(theProfileName) .For<IWidget>().UseNamedInstance(theDefaultName) .For<Rule>().UseNamedInstance("DefaultRule"); - var masterInstance = registry.InstanceOf<IWidget>().Is.Object(new AWidget()).WithName(theDefaultName); + LiteralInstance masterInstance = + registry.InstanceOf<IWidget>().Is.Object(new AWidget()).WithName(theDefaultName); ProfileManager manager = registry.Build().ProfileManager; Assert.AreSame(masterInstance, manager.GetDefault(typeof (IWidget), theProfileName)); @@ -105,7 +106,7 @@ { string theProfileName = "TheProfile"; - Registry registry = new Registry(); + var registry = new Registry(); registry.CreateProfile(theProfileName) .For<IWidget>().UseConcreteType<AWidget>(); @@ -116,9 +117,9 @@ Assert.AreEqual(Profile.InstanceKeyForProfile(theProfileName), defaultInstance.Name); - Container manager = new Container(graph); + var manager = new Container(graph); manager.SetDefaultsToProfile(theProfileName); - AWidget widget = (AWidget) manager.GetInstance<IWidget>(); + var widget = (AWidget) manager.GetInstance<IWidget>(); Assert.IsNotNull(widget); } } Modified: trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -41,7 +41,7 @@ { ValidationBuildSession session = validatedSession(r => { - r.AddInstanceOf<IWidget>(errorInstance().WithName("BadInstance")); + r.InstanceOf<IWidget>().IsThis(errorInstance().WithName("BadInstance")); r.InstanceOf<SomethingThatNeedsAWidget>().Is.OfConcreteType<SomethingThatNeedsAWidget>() .WithName("DependentInstance") @@ -71,8 +71,9 @@ { ValidationBuildSession session = validatedSession(r => { - r.AddInstanceOf<IWidget>(errorInstance().WithName("BadInstance")); + r.InstanceOf<IWidget>().IsThis(errorInstance().WithName("BadInstance")); + r.InstanceOf<SomethingThatNeedsAWidget>().Is.OfConcreteType<SomethingThatNeedsAWidget>() .WithName("DependentInstance") .CtorDependency<IWidget>().Is(x => x.References("BadInstance")); @@ -109,7 +110,7 @@ { Instance instance = errorInstance().WithName("Bad"); ValidationBuildSession session = - validatedSession(registry => registry.AddInstanceOf<IWidget>(instance)); + validatedSession(registry => registry.InstanceOf<IWidget>().IsThis(instance)); BuildError error = getFirstAndOnlyError(session); @@ -155,7 +156,7 @@ { var instance = new LiteralInstance(new WidgetWithOneValidationFailure()); ValidationBuildSession session = - validatedSession(registry => registry.AddInstanceOf<IWidget>(instance)); + validatedSession(registry => registry.InstanceOf<IWidget>().IsThis(instance)); Assert.AreEqual(1, session.ValidationErrors.Length); Modified: trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap.Testing/GenericsAcceptanceTester.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -160,14 +160,13 @@ [Test] public void Define_profile_with_generics_with_named_instance() { - IContainer manager = new Container(registry => + IContainer manager = new Container(r => { - registry.AddInstanceOf(typeof (IService<>), - new ConfiguredInstance(typeof (Service<>)).WithName("Service1")); - registry.AddInstanceOf(typeof (IService<>), - new ConfiguredInstance(typeof (Service2<>)).WithName("Service2")); - registry.CreateProfile("1").For(typeof (IService<>)).UseNamedInstance("Service1"); - registry.CreateProfile("2").For(typeof (IService<>)).UseNamedInstance("Service2"); + r.InstanceOf(typeof (IService<>)).Is(typeof (Service<>)).WithName("Service1"); + r.InstanceOf(typeof (IService<>)).Is(typeof (Service2<>)).WithName("Service2"); + + r.CreateProfile("1").For(typeof (IService<>)).UseNamedInstance("Service1"); + r.CreateProfile("2").For(typeof (IService<>)).UseNamedInstance("Service2"); }); manager.SetDefaultsToProfile("1"); Modified: trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs 2008-10-04 01:08:55 UTC (rev 168) +++ trunk/Source/StructureMap.Testing/Pipeline/SmartInstanceTester.cs 2008-10-05 02:29:44 UTC (rev 169) @@ -25,7 +25,7 @@ SmartInstance<T> instance = instanceOf<T>(); action(instance); - var container = new Container(r => r.ForRequestedType<T>().TheDefaultIs(instance)); + var container = new Container(r => r.ForRequestedType<T>().TheDefault.IsThis(instance)); return container.GetInstance<T>(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |