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