|
From: <jer...@us...> - 2008-09-16 11:52:01
|
Revision: 151
http://structuremap.svn.sourceforge.net/structuremap/?rev=151&view=rev
Author: jeremydmiller
Date: 2008-09-16 18:51:53 +0000 (Tue, 16 Sep 2008)
Log Message:
-----------
killing off some warnings, and redoing some diagnostics after the StructureMapConfiguration refactoring
Modified Paths:
--------------
trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
trunk/Source/StructureMap/Configuration/DSL/Registry.cs
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
trunk/Source/StructureMap/StructureMap.csproj
trunk/Source/StructureMap/StructureMapConfiguration.cs
trunk/Source/StructureMap/StructureMapException.resx
trunk/Source/StructureMap.Testing/BuildSessionTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs
trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
trunk/Source/StructureMap.Testing/Graph/EnumerationTester.cs
trunk/Source/StructureMap.Testing/Graph/FullStackFacadeTester.cs
trunk/Source/StructureMap.Testing/Graph/Interceptors/CompoundInterceptorTester.cs
trunk/Source/StructureMap.Testing/Graph/Interceptors/InterceptorLibraryTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginTester.cs
trunk/Source/StructureMap.Testing/Pipeline/BuildStrategiesTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/DefaultInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/InstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/OptionalSetterInjectionTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileManagerTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ProfileTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ReferencedInstanceTester.cs
trunk/Source/StructureMap.Testing/Pipeline/StubBuildSession.cs
trunk/Source/StructureMap.Testing/PipelineGraphTester.cs
trunk/Source/StructureMap.Testing/StructureMapConfigurationDefensiveChecksTester.cs
trunk/Source/StructureMap.Testing/StructureMapConfigurationTester.cs
trunk/Source/StructureMap.Testing.Widget5/StructureMap.Testing.Widget5.csproj
trunk/Source/StructureMap.Testing.Widget5/WidgetRegistry.cs
Added Paths:
-----------
trunk/Source/StructureMap/ConfigurationExpression.cs
trunk/Source/StructureMap/InitializationExpression.cs
Property Changed:
----------------
trunk/Source/StructureMap.Testing.Widget5/
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/CreatePluginFamilyExpression.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -151,25 +151,10 @@
return this;
}
- [Obsolete("Kill!")]
- public CreatePluginFamilyExpression<PLUGINTYPE> AddConcreteType<CONCRETETYPE>()
- {
- return AddConcreteType<CONCRETETYPE>(Guid.NewGuid().ToString());
- }
- [Obsolete("Kill!")]
- public CreatePluginFamilyExpression<PLUGINTYPE> AddConcreteType<CONCRETETYPE>(string instanceName)
+ public CreatePluginFamilyExpression<PLUGINTYPE> AddConcreteType<PLUGGEDTYPE>()
{
- ExpressionValidator.ValidatePluggabilityOf(typeof (CONCRETETYPE)).IntoPluginType(typeof (PLUGINTYPE));
-
- _alterations.Add(
- family =>
- {
- ConfiguredInstance instance = new ConfiguredInstance(typeof(CONCRETETYPE)).WithName(instanceName);
- family.AddInstance(instance);
- }
- );
-
+ _alterations.Add(family => family.AddInstance(new SmartInstance<PLUGGEDTYPE>()));
return this;
}
@@ -193,33 +178,5 @@
return new InstanceExpression<PLUGINTYPE>(i => TheDefaultIs(i));
}
}
-
- [Obsolete("Kill!")]
- public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIs(PLUGINTYPE @object)
- {
- return TheDefaultIs(new LiteralInstance(@object));
- }
-
- [Obsolete("Kill!")]
- public CreatePluginFamilyExpression<PLUGINTYPE> TheDefaultIs(Func<PLUGINTYPE> func)
- {
- ConstructorInstance<PLUGINTYPE> instance = new ConstructorInstance<PLUGINTYPE>(func);
- return TheDefaultIs(instance);
- }
-
- [Obsolete("Kill!")]
- public CreatePluginFamilyExpression<PLUGINTYPE> AddInstance(PLUGINTYPE @object)
- {
- LiteralInstance instance = new LiteralInstance(@object);
- return AddInstance(instance);
- }
-
- [Obsolete("Kill!")]
- public CreatePluginFamilyExpression<PLUGINTYPE> AddInstance(Func<PLUGINTYPE> func)
- {
- ConstructorInstance<PLUGINTYPE> instance = new ConstructorInstance<PLUGINTYPE>(func);
- return AddInstance(instance);
- }
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/Configuration/DSL/Expressions/InstanceExpression.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -62,5 +62,10 @@
{
return returnInstance(new ConstructorInstance<T>(func));
}
+
+ public PrototypeInstance PrototypeOf(T template)
+ {
+ return returnInstance(new PrototypeInstance((ICloneable) template));
+ }
}
}
Modified: trunk/Source/StructureMap/Configuration/DSL/Registry.cs
===================================================================
--- trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/Configuration/DSL/Registry.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -83,80 +83,16 @@
return graph;
}
- /// <summary>
- /// Starts an instance definition of type T
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- [Obsolete("Like to go away")]
- public ConfiguredInstanceExpression<PLUGINTYPE> AddInstanceOf<PLUGINTYPE>()
+ public IsExpression<T> InstanceOf<T>()
{
- return new ConfiguredInstanceExpression<PLUGINTYPE>(this);
- }
-
- [Obsolete("Like to get rid of this")]
- public class ConfiguredInstanceExpression<PLUGINTYPE>
- {
- private readonly Registry _registry;
-
- public ConfiguredInstanceExpression(Registry registry)
+ return new InstanceExpression<T>(instance =>
{
- _registry = registry;
- }
-
-
- public ConfiguredInstance UsingConcreteType<T>()
- {
- ConfiguredInstance instance = new ConfiguredInstance(typeof(T));
- _registry.addExpression(graph => graph.FindFamily(typeof(PLUGINTYPE)).AddInstance(instance));
-
- return instance;
- }
+ Action<PluginGraph> alteration = g => g.FindFamily(typeof (T)).AddInstance(instance);
+ _actions.Add(alteration);
+ });
}
-
/// <summary>
- /// Registers a preconfigured instance
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="target"></param>
- /// <returns></returns>
- [Obsolete("Like to get rid of this")]
- public LiteralInstance AddInstanceOf<PLUGINTYPE>(PLUGINTYPE target)
- {
- LiteralInstance literal = new LiteralInstance(target);
- _actions.Add(graph => graph.FindFamily(typeof (PLUGINTYPE)).AddInstance(literal));
-
- return literal;
- }
-
- /// <summary>
- /// Add a preconfigured instance as a Prototype
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <param name="prototype"></param>
- /// <returns></returns>
- [Obsolete("Like to get rid of this")]
- public PrototypeInstance AddPrototypeInstanceOf<PLUGINTYPE>(PLUGINTYPE prototype)
- {
- PrototypeInstance instance = new PrototypeInstance((ICloneable) prototype);
- _actions.Add(graph => graph.FindFamily(typeof (PLUGINTYPE)).AddInstance(instance));
-
- return instance;
- }
-
- /// <summary>
- /// convenience method for a UserControl
- /// </summary>
- /// <param name="url"></param>
- /// <returns></returns>
- [Obsolete("Like to get rid of this")]
- public static UserControlInstance LoadUserControlFrom(string url)
- {
- return new UserControlInstance(url);
- }
-
- /// <summary>
/// Starts the definition of a new Profile
/// </summary>
/// <param name="profileName"></param>
@@ -246,5 +182,7 @@
PluginCache.AddFilledType(typeof(PLUGINTYPE));
return ForRequestedType<PLUGINTYPE>();
}
+
+
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/ConfigurationExpression.cs
===================================================================
--- trunk/Source/StructureMap/ConfigurationExpression.cs (rev 0)
+++ trunk/Source/StructureMap/ConfigurationExpression.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -0,0 +1,63 @@
+using System.Collections.Generic;
+using System.Xml;
+using StructureMap.Configuration;
+using StructureMap.Configuration.DSL;
+using StructureMap.Diagnostics;
+using StructureMap.Graph;
+
+namespace StructureMap
+{
+ public class ConfigurationExpression : Registry
+ {
+ protected readonly GraphLog _log = new GraphLog();
+ private readonly List<Registry> _registries = new List<Registry>();
+ protected readonly ConfigurationParserBuilder _parserBuilder;
+
+ internal ConfigurationExpression()
+ {
+ _parserBuilder = new ConfigurationParserBuilder(_log);
+ _parserBuilder.IgnoreDefaultFile = true;
+ _parserBuilder.PullConfigurationFromAppConfig = false;
+
+ _registries.Add(this);
+
+ }
+
+ public void AddRegistry<T>() where T : Registry, new()
+ {
+ AddRegistry(new T());
+ }
+
+ public void AddRegistry(Registry registry)
+ {
+ _registries.Add(registry);
+ }
+
+ public void AddConfigurationFromXmlFile(string fileName)
+ {
+ _parserBuilder.IncludeFile(fileName);
+ }
+
+ public void AddConfigurationFromNode(XmlNode node)
+ {
+ _parserBuilder.IncludeNode(node, "Xml configuration");
+ }
+
+ public bool IncludeConfigurationFromConfigFile
+ {
+ set
+ {
+ _parserBuilder.UseAndEnforceExistenceOfDefaultFile = value;
+ }
+
+ }
+
+ internal PluginGraph BuildGraph()
+ {
+ var parsers = _parserBuilder.GetParsers();
+ PluginGraphBuilder builder = new PluginGraphBuilder(parsers, _registries.ToArray(), _log);
+
+ return builder.Build();
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/Container.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -3,8 +3,6 @@
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
-using System.Xml;
-using StructureMap.Configuration;
using StructureMap.Configuration.DSL;
using StructureMap.Diagnostics;
using StructureMap.Exceptions;
@@ -14,86 +12,6 @@
namespace StructureMap
{
- public class InitializationExpression : ConfigurationExpression
- {
- internal InitializationExpression()
- {
- _parserBuilder.IgnoreDefaultFile = false;
- DefaultProfileName = string.Empty;
- }
-
- public bool UseDefaultStructureMapConfigFile
- {
- set { _parserBuilder.UseAndEnforceExistenceOfDefaultFile = value; }
- }
-
- public bool IgnoreStructureMapConfig
- {
- set { _parserBuilder.IgnoreDefaultFile = value; }
- }
-
- public bool PullConfigurationFromAppConfig
- {
- set { _parserBuilder.PullConfigurationFromAppConfig = value; }
- }
-
- public string DefaultProfileName { get; set; }
- }
-
- public class ConfigurationExpression : Registry
- {
- protected readonly GraphLog _log = new GraphLog();
- private readonly List<Registry> _registries = new List<Registry>();
- protected readonly ConfigurationParserBuilder _parserBuilder;
-
- internal ConfigurationExpression()
- {
- _parserBuilder = new ConfigurationParserBuilder(_log);
- _parserBuilder.IgnoreDefaultFile = true;
- _parserBuilder.PullConfigurationFromAppConfig = false;
-
- _registries.Add(this);
-
- }
-
- public void AddRegistry<T>() where T : Registry, new()
- {
- AddRegistry(new T());
- }
-
- public void AddRegistry(Registry registry)
- {
- _registries.Add(registry);
- }
-
- public void AddConfigurationFromXmlFile(string fileName)
- {
- _parserBuilder.IncludeFile(fileName);
- }
-
- public void AddConfigurationFromNode(XmlNode node)
- {
- _parserBuilder.IncludeNode(node, "Xml configuration");
- }
-
- public bool IncludeConfigurationFromConfigFile
- {
- set
- {
- _parserBuilder.UseAndEnforceExistenceOfDefaultFile = value;
- }
-
- }
-
- internal PluginGraph BuildGraph()
- {
- var parsers = _parserBuilder.GetParsers();
- PluginGraphBuilder builder = new PluginGraphBuilder(parsers, _registries.ToArray(), _log);
-
- return builder.Build();
- }
- }
-
/// <summary>
/// A collection of IInstanceFactory's.
/// </summary>
@@ -101,6 +19,7 @@
{
private InterceptorLibrary _interceptorLibrary;
private PipelineGraph _pipelineGraph;
+ private PluginGraph _pluginGraph;
public Container(Action<ConfigurationExpression> action)
{
@@ -118,6 +37,11 @@
{
}
+ public PluginGraph PluginGraph
+ {
+ get { return _pluginGraph; }
+ }
+
/// <summary>
/// Constructor to create an Container
/// </summary>
@@ -138,6 +62,7 @@
pluginGraph.Seal();
}
+ _pluginGraph = pluginGraph;
pluginGraph.Log.AssertFailures();
_pipelineGraph = new PipelineGraph(pluginGraph);
Modified: trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs
===================================================================
--- trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/Diagnostics/DoctorRunner.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -1,14 +1,11 @@
using System;
+using StructureMap.Exceptions;
using StructureMap.Graph;
namespace StructureMap.Diagnostics
{
public class DoctorRunner : MarshalByRefObject
{
- public DoctorRunner()
- {
- }
-
public override object InitializeLifetimeService()
{
return null;
@@ -16,11 +13,11 @@
public DoctorReport RunReport(string bootstrapperTypeName)
{
- var report = new DoctorReport(){Result = DoctorResult.Success};
-
+ var report = new DoctorReport {Result = DoctorResult.Success};
+
IBootstrapper bootstrapper;
- try
+ try
{
var path = new TypePath(bootstrapperTypeName);
Type bootstrapperType = path.FindType();
@@ -37,7 +34,29 @@
try
{
bootstrapper.BootstrapStructureMap();
+
+ PluginGraph graph = ObjectFactory.PluginGraph;
+
+ if (graph.Log.ErrorCount > 0)
+ {
+ report.ErrorMessages = graph.Log.BuildFailureMessage();
+ report.Result = DoctorResult.ConfigurationErrors;
+ }
+ else
+ {
+ writeConfigurationAndValidate(report, graph);
+ }
+
+
+ return report;
}
+ catch (StructureMapConfigurationException ex)
+ {
+ report.ErrorMessages = ex.Message;
+ report.Result = DoctorResult.ConfigurationErrors;
+
+ return report;
+ }
catch (Exception ex)
{
report.Result = DoctorResult.BootstrapperFailure;
@@ -46,21 +65,7 @@
return report;
}
- PluginGraph graph = StructureMapConfiguration.GetPluginGraph();
- if (graph.Log.ErrorCount > 0)
- {
- report.ErrorMessages = graph.Log.BuildFailureMessage();
- report.Result = DoctorResult.ConfigurationErrors;
- }
- else
- {
- writeConfigurationAndValidate(report, graph);
- }
-
-
-
- return report;
}
private void writeConfigurationAndValidate(DoctorReport report, PluginGraph graph)
@@ -69,7 +74,7 @@
var writer = new WhatDoIHaveWriter(pipelineGraph);
report.WhatDoIHave = writer.GetText();
- ValidationBuildSession session = new ValidationBuildSession(pipelineGraph, graph.InterceptorLibrary);
+ var session = new ValidationBuildSession(pipelineGraph, graph.InterceptorLibrary);
session.PerformValidations();
if (session.HasBuildErrors())
@@ -78,7 +83,7 @@
}
else if (session.HasValidationErrors())
{
- report.Result = DoctorResult.ValidationErrors;
+ report.Result = DoctorResult.ValidationErrors;
}
if (!session.Success)
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/IContainer.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -2,6 +2,7 @@
using System.Collections;
using System.Collections.Generic;
using StructureMap.Configuration.DSL;
+using StructureMap.Graph;
using StructureMap.Pipeline;
namespace StructureMap
@@ -67,5 +68,6 @@
IExplicitProperty With(string argName);
void AssertConfigurationIsValid();
object GetInstance(Type type, ExplicitArguments args);
+ PluginGraph PluginGraph { get; }
}
}
\ No newline at end of file
Added: trunk/Source/StructureMap/InitializationExpression.cs
===================================================================
--- trunk/Source/StructureMap/InitializationExpression.cs (rev 0)
+++ trunk/Source/StructureMap/InitializationExpression.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -0,0 +1,28 @@
+namespace StructureMap
+{
+ public class InitializationExpression : ConfigurationExpression
+ {
+ internal InitializationExpression()
+ {
+ _parserBuilder.IgnoreDefaultFile = false;
+ DefaultProfileName = string.Empty;
+ }
+
+ public bool UseDefaultStructureMapConfigFile
+ {
+ set { _parserBuilder.UseAndEnforceExistenceOfDefaultFile = value; }
+ }
+
+ public bool IgnoreStructureMapConfig
+ {
+ set { _parserBuilder.IgnoreDefaultFile = value; }
+ }
+
+ public bool PullConfigurationFromAppConfig
+ {
+ set { _parserBuilder.PullConfigurationFromAppConfig = value; }
+ }
+
+ public string DefaultProfileName { get; set; }
+ }
+}
\ No newline at end of file
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -3,6 +3,7 @@
using System.Collections.Generic;
using System.Security.Permissions;
using StructureMap.Configuration.DSL;
+using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Pipeline;
@@ -17,7 +18,7 @@
public class ObjectFactory
{
private static readonly object _lockObject = new object();
- private static IContainer _manager;
+ private static IContainer _container;
private static string _profile = string.Empty;
private static event Notify _notify;
@@ -31,7 +32,7 @@
{
StructureMapConfiguration.Unseal();
- _manager = null;
+ _container = null;
_profile = string.Empty;
if (_notify != null)
@@ -51,7 +52,7 @@
var graph = expression.BuildGraph();
StructureMapConfiguration.Seal();
- _manager = new Container(graph);
+ _container = new Container(graph);
Profile = expression.DefaultProfileName;
}
}
@@ -134,18 +135,18 @@
{
get
{
- if (_manager == null)
+ if (_container == null)
{
lock (_lockObject)
{
- if (_manager == null)
+ if (_container == null)
{
- _manager = buildManager();
+ _container = buildManager();
}
}
}
- return _manager;
+ return _container;
}
}
@@ -164,12 +165,15 @@
get { return _profile; }
}
+ internal static PluginGraph PluginGraph
+ {
+ get { return container.PluginGraph; }
+ }
-
internal static void ReplaceManager(IContainer container)
{
- _manager = container;
+ _container = container;
}
public static void Configure(Action<Registry> configure)
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -28,15 +28,17 @@
protected ConfiguredInstanceBase(Type pluggedType, string name)
{
- // TODO -- need defensive check HERE!
- //throw new NotImplementedException("Need to check for public constructor HERE!");
-
_pluggedType = pluggedType;
Name = name;
}
protected ConfiguredInstanceBase(Type pluggedType) : this(pluggedType, Guid.NewGuid().ToString())
{
+ if (pluggedType != null)
+ if (pluggedType.IsAbstract || pluggedType.IsInterface)
+ {
+ throw new StructureMapException(25);
+ }
}
Modified: trunk/Source/StructureMap/StructureMap.csproj
===================================================================
--- trunk/Source/StructureMap/StructureMap.csproj 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/StructureMap.csproj 2008-09-16 18:51:53 UTC (rev 151)
@@ -389,6 +389,7 @@
<Link>Properties\structuremap.snk</Link>
</None>
<None Include="ConfigurationClasses.cd" />
+ <Compile Include="ConfigurationExpression.cs" />
<Compile Include="Configuration\DictionaryReader.cs" />
<Compile Include="Configuration\DSL\Expressions\InstanceExpression.cs" />
<Compile Include="Configuration\ITypeReader.cs" />
@@ -405,6 +406,7 @@
<Compile Include="Graph\ITypeScanner.cs" />
<Compile Include="Graph\PluginCache.cs" />
<Compile Include="IBootstrapper.cs" />
+ <Compile Include="InitializationExpression.cs" />
<Compile Include="Pipeline\BuildFrame.cs" />
<Compile Include="Pipeline\BuildStack.cs" />
<Compile Include="Pipeline\ConfiguredInstanceBase.cs" />
Modified: trunk/Source/StructureMap/StructureMapConfiguration.cs
===================================================================
--- trunk/Source/StructureMap/StructureMapConfiguration.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/StructureMapConfiguration.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -195,16 +195,6 @@
return registry.ForRequestedType(pluginType);
}
- /// <summary>
- /// Adds a new configured instance of Type T
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <returns></returns>
- public static Registry.ConfiguredInstanceExpression<T> AddInstanceOf<T>()
- {
- return registry.AddInstanceOf<T>();
- }
-
public static void AddInstanceOf<T>(Func<T> func)
{
registry.AddInstanceOf<T>(new ConstructorInstance<T>(func));
@@ -217,18 +207,6 @@
/// <summary>
- /// Adds a preconfigured instance of Type T to StructureMap. When this instance is requested,
- /// StructureMap will always return the original object.
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="target"></param>
- /// <returns></returns>
- public static LiteralInstance AddInstanceOf<T>(T target)
- {
- return registry.AddInstanceOf(target);
- }
-
- /// <summary>
/// Starts the definition of a configuration Profile.
/// </summary>
/// <param name="profileName"></param>
Modified: trunk/Source/StructureMap/StructureMapException.resx
===================================================================
--- trunk/Source/StructureMap/StructureMapException.resx 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap/StructureMapException.resx 2008-09-16 18:51:53 UTC (rev 151)
@@ -259,4 +259,7 @@
<data name="50" xml:space="preserve">
<value>StructureMapConfiguration cannot be used after ObjectFactory is initialized</value>
</data>
+ <data name="125" xml:space="preserve">
+ <value>Cannot plug an abstract class or an interface</value>
+ </data>
</root>
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/BuildSessionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/BuildSessionTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -77,11 +77,14 @@
[Test]
public void If_no_child_array_is_explicitly_defined_return_all_instances()
{
- IContainer manager = new Container(registry =>
+ IContainer manager = new Container(r =>
{
- registry.AddInstanceOf<IWidget>(new ColorWidget("Red"));
- registry.AddInstanceOf<IWidget>(new ColorWidget("Blue"));
- registry.AddInstanceOf<IWidget>(new ColorWidget("Green"));
+ r.ForRequestedType<IWidget>().AddInstances(x =>
+ {
+ x.Object(new ColorWidget("Red"));
+ x.Object(new ColorWidget("Blue"));
+ x.Object(new ColorWidget("Green"));
+ });
});
WidgetHolder holder = manager.GetInstance<WidgetHolder>();
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddInstanceTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -19,25 +19,25 @@
registry.ScanAssemblies().IncludeAssemblyContainingType<ColorWidget>();
// Add an instance with properties
- registry.AddInstanceOf<IWidget>()
- .UsingConcreteType<ColorWidget>()
+ registry.InstanceOf<IWidget>()
+ .Is.OfConcreteType<ColorWidget>()
.WithName("DarkGreen")
.WithProperty("color").EqualTo("DarkGreen");
// Add an instance by specifying the ConcreteKey
- registry.AddInstanceOf<IWidget>()
- .UsingConcreteType<ColorWidget>()
+ registry.InstanceOf<IWidget>()
+ .Is.OfConcreteType<ColorWidget>()
.WithName("Purple")
.WithProperty("color").EqualTo("Purple");
// Pull a property from the App config
- registry.AddInstanceOf<IWidget>()
- .UsingConcreteType<ColorWidget>()
+ registry.InstanceOf<IWidget>()
+ .Is.OfConcreteType<ColorWidget>()
.WithName("AppSetting")
.WithProperty("color").EqualToAppSetting("Color");
- registry.AddInstanceOf<IWidget>().UsingConcreteType<AWidget>();
+ registry.InstanceOf<IWidget>().Is.OfConcreteType<AWidget>();
});
}
@@ -63,9 +63,9 @@
public void AddInstanceAndOverrideTheConcreteTypeForADependency()
{
IContainer container = new Container(
- registry => registry.AddInstanceOf<Rule>().UsingConcreteType<WidgetRule>()
+ registry => registry.InstanceOf<Rule>().Is.OfConcreteType<WidgetRule>()
.WithName("AWidgetRule")
- .Child<IWidget>().IsConcreteType<AWidget>());
+ .CtorDependency<IWidget>().Is(i => i.OfConcreteType<AWidget>()));
container.GetInstance<Rule>("AWidgetRule")
.IsType<WidgetRule>()
@@ -84,47 +84,29 @@
public void SimpleCaseWithNamedInstance()
{
container = new Container(
- registry => registry.AddInstanceOf<IWidget>().UsingConcreteType<AWidget>().WithName("MyInstance"));
+ registry => registry.InstanceOf<IWidget>().Is.OfConcreteType<AWidget>().WithName("MyInstance"));
var widget = (AWidget) container.GetInstance<IWidget>("MyInstance");
Assert.IsNotNull(widget);
}
- [Test]
- public void temp()
- {
- IContainer container = new Container(registry =>
- {
- registry.AddInstanceOf<Rule>().UsingConcreteType<ARule>().WithName("Alias");
- // Add an instance by specifying the ConcreteKey
- registry.AddInstanceOf<IWidget>()
- .UsingConcreteType<ColorWidget>()
- .WithName("Purple")
- .WithProperty("color").EqualTo("Purple");
-
- // Specify a new Instance, override a dependency with a named instance
- registry.AddInstanceOf<Rule>().UsingConcreteType<WidgetRule>().WithName("RuleThatUsesMyInstance")
- .Child<IWidget>("widget").IsNamedInstance("Purple");
- });
- }
-
[Test]
public void SpecifyANewInstanceOverrideADependencyWithANamedInstance()
{
container = new Container(registry =>
{
- registry.AddInstanceOf<Rule>().UsingConcreteType<ARule>().WithName("Alias");
+ registry.InstanceOf<Rule>().Is.OfConcreteType<ARule>().WithName("Alias");
// Add an instance by specifying the ConcreteKey
- registry.AddInstanceOf<IWidget>()
- .UsingConcreteType<ColorWidget>()
+ registry.InstanceOf<IWidget>()
+ .Is.OfConcreteType<ColorWidget>()
.WithName("Purple")
.WithProperty("color").EqualTo("Purple");
// Specify a new Instance, override a dependency with a named instance
- registry.AddInstanceOf<Rule>().UsingConcreteType<WidgetRule>().WithName("RuleThatUsesMyInstance")
- .Child<IWidget>("widget").IsNamedInstance("Purple");
+ registry.InstanceOf<Rule>().Is.OfConcreteType<WidgetRule>().WithName("RuleThatUsesMyInstance")
+ .CtorDependency<IWidget>("widget").Is(x => x.References("Purple"));
});
Assert.IsInstanceOfType(typeof (ARule), container.GetInstance<Rule>("Alias"));
@@ -141,14 +123,11 @@
string instanceKey = "OrangeWidgetRule";
IContainer manager = new Container(
- registry => registry.AddInstanceOf<Rule>().UsingConcreteType<WidgetRule>().WithName(instanceKey)
- .Child<IWidget>().Is(
- Instance<ColorWidget>()
- .WithProperty("color").EqualTo("Orange")
- .WithName("Orange")
- ));
+ registry => registry.InstanceOf<Rule>().Is.OfConcreteType<WidgetRule>().WithName(instanceKey)
+ .CtorDependency<IWidget>().Is(i => i.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo("Orange").WithName("Orange"))
+
+ );
-
var rule = (WidgetRule) manager.GetInstance<Rule>(instanceKey);
var widget = (ColorWidget) rule.Widget;
Assert.AreEqual("Orange", widget.Color);
@@ -164,7 +143,7 @@
container =
new Container(
- registry => registry.AddPrototypeInstanceOf<IWidget>(theWidget).WithName("Jeremy"));
+ registry => registry.InstanceOf<IWidget>().Is.PrototypeOf(theWidget).WithName("Jeremy"));
var widget1 = (CloneableWidget) container.GetInstance<IWidget>("Jeremy");
var widget2 = (CloneableWidget) container.GetInstance<IWidget>("Jeremy");
@@ -187,7 +166,7 @@
var julia = new CloneableWidget("Julia");
container =
- new Container(registry => registry.AddInstanceOf<IWidget>(julia).WithName("Julia"));
+ new Container(registry => registry.InstanceOf<IWidget>().Is.Object(julia).WithName("Julia"));
var widget1 = (CloneableWidget) container.GetInstance<IWidget>("Julia");
var widget2 = (CloneableWidget) container.GetInstance<IWidget>("Julia");
@@ -199,6 +178,7 @@
}
}
+
public class WidgetRule : Rule
{
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/AddTypesTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using NUnit.Framework;
-using StructureMap.Configuration.DSL;
namespace StructureMap.Testing.Configuration.DSL
{
@@ -30,15 +29,17 @@
[Test]
public void A_concrete_type_is_available_by_name_when_it_is_added_by_the_shorthand_mechanism()
{
- IContainer manager = new Container(registry => registry.ForRequestedType<IAddTypes>()
- .AddConcreteType<RedAddTypes>("Red")
- .AddConcreteType<GreenAddTypes>("Green")
- .AddConcreteType<BlueAddTypes>("Blue")
- .AddConcreteType<PurpleAddTypes>());
+ IContainer container = new Container(r => r.ForRequestedType<IAddTypes>().AddInstances(x =>
+ {
+ x.OfConcreteType<RedAddTypes>().WithName("Red");
+ x.OfConcreteType<GreenAddTypes>().WithName("Green");
+ x.OfConcreteType<BlueAddTypes>().WithName("Blue");
+ x.OfConcreteType<PurpleAddTypes>();
+ }));
- Assert.IsInstanceOfType(typeof (RedAddTypes), manager.GetInstance<IAddTypes>("Red"));
- Assert.IsInstanceOfType(typeof (GreenAddTypes), manager.GetInstance<IAddTypes>("Green"));
- Assert.IsInstanceOfType(typeof (BlueAddTypes), manager.GetInstance<IAddTypes>("Blue"));
+ container.GetInstance<IAddTypes>("Red").IsType<RedAddTypes>();
+ container.GetInstance<IAddTypes>("Green").IsType<GreenAddTypes>();
+ container.GetInstance<IAddTypes>("Blue").IsType<BlueAddTypes>();
}
[Test]
@@ -58,11 +59,15 @@
[Test]
public void Make_sure_that_we_dont_double_dip_instances_when_we_register_a_type_with_a_name()
{
- IContainer manager = new Container(registry => registry.ForRequestedType<IAddTypes>()
- .AddConcreteType<RedAddTypes>("Red")
- .AddConcreteType<GreenAddTypes>()
- .AddConcreteType<BlueAddTypes>("Blue")
- .AddConcreteType<PurpleAddTypes>());
+ IContainer manager = new Container(r =>
+ r.ForRequestedType<IAddTypes>().AddInstances(x =>
+ {
+ x.OfConcreteType<GreenAddTypes>();
+ x.OfConcreteType<BlueAddTypes>();
+ x.OfConcreteType<PurpleAddTypes>();
+ x.OfConcreteType<PurpleAddTypes>().WithName("Purple");
+ })
+ );
IList<IAddTypes> instances = manager.GetAllInstances<IAddTypes>();
Assert.AreEqual(4, instances.Count);
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/CreatePluginFamilyTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -40,7 +40,7 @@
{
Container manager =
new Container(
- registry => registry.ForRequestedType<IWidget>().AddInstance(delegate { return new AWidget(); }));
+ r => r.InstanceOf<IWidget>().Is.ConstructedBy(() => new AWidget()));
Assert.IsInstanceOfType(typeof (AWidget), manager.GetAllInstances<IWidget>()[0]);
}
@@ -51,7 +51,7 @@
AWidget aWidget = new AWidget();
Container manager =
- new Container(registry => registry.ForRequestedType<IWidget>().AddInstance(aWidget));
+ new Container(registry => registry.InstanceOf<IWidget>().Is.Object(aWidget));
Assert.IsInstanceOfType(typeof (AWidget), manager.GetAllInstances<IWidget>()[0]);
}
@@ -70,7 +70,7 @@
public void AddInstanceWithNameOnlyAddsOneInstanceToStructureMap()
{
IContainer manager =
- new Container(registry => registry.AddInstanceOf<Something>().UsingConcreteType<RedSomething>().WithName("Red"));
+ new Container(registry => registry.InstanceOf<Something>().Is.OfConcreteType<RedSomething>().WithName("Red"));
IList<Something> instances = manager.GetAllInstances<Something>();
Assert.AreEqual(1, instances.Count);
}
@@ -189,7 +189,7 @@
{
Container manager =
new Container(
- registry => registry.ForRequestedType<IWidget>().TheDefaultIs(delegate { return new AWidget(); }));
+ registry => registry.ForRequestedType<IWidget>().TheDefault.Is.ConstructedBy(() => new AWidget()));
Assert.IsInstanceOfType(typeof (AWidget), manager.GetInstance<IWidget>());
}
@@ -201,7 +201,7 @@
Container manager =
new Container(
- registry => registry.ForRequestedType<IWidget>().TheDefaultIs(aWidget));
+ registry => registry.ForRequestedType<IWidget>().TheDefault.Is.Object(aWidget));
Assert.AreSame(aWidget, manager.GetInstance<IWidget>());
}
@@ -237,7 +237,7 @@
{
Container manager =
new Container(
- registry => registry.ForRequestedType<Guid>().TheDefaultIs(()=>Guid.NewGuid()));
+ registry => registry.ForRequestedType<Guid>().TheDefault.Is.ConstructedBy(()=>Guid.NewGuid()));
Assert.IsInstanceOfType(typeof(Guid), manager.GetInstance<Guid>());
}
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/DeepInstanceTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -86,23 +86,21 @@
{
assertThingMatches(registry =>
{
- registry.AddInstanceOf<IWidget>()
- .UsingConcreteType<ColorWidget>()
+ registry.InstanceOf<IWidget>()
+ .Is.OfConcreteType<ColorWidget>()
.WithName("Yellow")
.WithProperty("color").EqualTo("yellow");
- registry.AddInstanceOf<Rule>()
- .UsingConcreteType<WidgetRule>()
+ registry.InstanceOf<Rule>()
+ .Is.OfConcreteType<WidgetRule>()
.WithName("TheWidgetRule")
- .Child<IWidget>().IsNamedInstance("Yellow");
+ .CtorDependency<IWidget>().Is(i => i.References("Yellow"));
- registry.BuildInstancesOf<Thing>().TheDefaultIs(
- Instance<Thing>()
- .WithProperty("average").EqualTo(.333)
- .WithProperty("name").EqualTo("Jeremy")
- .WithProperty("count").EqualTo(4)
- .Child<Rule>().IsNamedInstance("TheWidgetRule")
- );
+ registry.BuildInstancesOf<Thing>().TheDefault.Is.OfConcreteType<Thing>()
+ .WithCtorArg("average").EqualTo(.333)
+ .WithCtorArg("name").EqualTo("Jeremy")
+ .WithCtorArg("count").EqualTo(4)
+ .CtorDependency<Rule>().Is(i => i.References("TheWidgetRule"));
});
}
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/InjectArrayTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -148,12 +148,12 @@
[Test]
public void PlaceMemberInArrayByReference()
{
- IContainer manager = new Container(registry =>
+ IContainer manager = new Container(r =>
{
- registry.AddInstanceOf<IHandler>().UsingConcreteType<Handler1>().WithName("One");
- registry.AddInstanceOf<IHandler>().UsingConcreteType<Handler2>().WithName("Two");
+ r.InstanceOf<IHandler>().Is.OfConcreteType<Handler1>().WithName("One");
+ r.InstanceOf<IHandler>().Is.OfConcreteType<Handler2>().WithName("Two");
- registry.ForRequestedType<Processor>()
+ r.ForRequestedType<Processor>()
.TheDefaultIs(
Instance<Processor>()
.WithProperty("name").EqualTo("Jeremy")
@@ -176,8 +176,8 @@
{
IContainer manager = new Container(registry =>
{
- registry.AddInstanceOf<IHandler>().UsingConcreteType<Handler1>().WithName("One");
- registry.AddInstanceOf<IHandler>().UsingConcreteType<Handler2>().WithName("Two");
+ registry.InstanceOf<IHandler>().Is.OfConcreteType<Handler1>().WithName("One");
+ registry.InstanceOf<IHandler>().Is.OfConcreteType<Handler2>().WithName("Two");
registry.ForRequestedType<Processor>().TheDefault.Is.OfConcreteType<Processor>()
.WithCtorArg("name").EqualTo("Jeremy")
@@ -221,6 +221,7 @@
{
IContainer container = new Container(r =>
{
+// ReSharper disable ConvertToLambdaExpression
r.ForRequestedType<Processor>().TheDefault.Is.OfConcreteType<Processor>()
.WithCtorArg("name").EqualTo("Jeremy")
.TheArrayOf<IHandler>().Contains(x =>
@@ -229,8 +230,8 @@
x.OfConcreteType<Handler2>();
x.OfConcreteType<Handler3>();
});
+// ReSharper restore ConvertToLambdaExpression
- int number = 0;
});
var processor = container.GetInstance<Processor>();
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -54,7 +54,7 @@
public void Can_add_an_instance_for_concrete_class_with_no_constructors()
{
Registry registry = new Registry();
- registry.ForRequestedType<ConcreteWithNoConstructor>().TheDefaultIs(() => ConcreteWithNoConstructor.Build());
+ registry.ForRequestedType<ConcreteWithNoConstructor>().TheDefault.Is.ConstructedBy(() => ConcreteWithNoConstructor.Build());
Container container = new Container(registry);
Modified: trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Diagnostics/DoctorTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -17,11 +17,9 @@
{
private DoctorReport fetchReport<T>(string config) where T : IBootstrapper
{
- StructureMapConfiguration.ResetAll();
- StructureMapConfiguration.IgnoreStructureMapConfig = true;
-
var doctor = new Doctor
{BinaryPath = Path.GetFullPath("."), BootstrapperType = typeof (T).AssemblyQualifiedName};
+
if (!string.IsNullOrEmpty(config))
{
var doc = new XmlDocument();
@@ -155,7 +153,7 @@
Assembly assembly = Assembly.GetExecutingAssembly();
foreach (Type type in assembly.GetExportedTypes())
{
- if (typeof(IBootstrapper).IsAssignableFrom(type))
+ if (typeof (IBootstrapper).IsAssignableFrom(type))
{
Debug.WriteLine(TypePath.GetAssemblyQualifiedName(type));
}
@@ -169,7 +167,7 @@
public void BootstrapStructureMap()
{
- StructureMapConfiguration.AddInstanceOf<IWidget>(new ConfiguredInstance(typeof(ColorRule)));
+ StructureMapConfiguration.AddInstanceOf<IWidget>(new ConfiguredInstance(typeof (ColorRule)));
}
#endregion
@@ -181,8 +179,12 @@
public void BootstrapStructureMap()
{
- StructureMapConfiguration.IgnoreStructureMapConfig = true;
- StructureMapConfiguration.AddInstanceOf(new DoctorTester.ClassThatFails());
+ ObjectFactory.Initialize(x =>
+ {
+ x.IgnoreStructureMapConfig = true;
+
+ x.BuildInstancesOf<DoctorTester.ClassThatFails>().TheDefaultIsConcreteType<DoctorTester.ClassThatFails>();
+ });
}
#endregion
@@ -208,9 +210,15 @@
public void BootstrapStructureMap()
{
- Instance bad = RegistryExpressions.ConstructedBy<IWidget>(() => { throw new NotImplementedException(); });
+ ObjectFactory.Initialize(x =>
+ {
+ x.InstanceOf<IWidget>().Is.ConstructedBy(() =>
+ {
+ throw new NotImplementedException();
+ });
+ });
- StructureMapConfiguration.AddInstanceOf<IWidget>(bad);
+
}
#endregion
@@ -223,7 +231,7 @@
public void BootstrapStructureMap()
{
StructureMapConfiguration.IgnoreStructureMapConfig = true;
- StructureMapConfiguration.BuildInstancesOf<IWidget>().TheDefaultIs(new ColorWidget("Red"));
+ StructureMapConfiguration.BuildInstancesOf<IWidget>().TheDefault.Is.Object(new ColorWidget("Red"));
}
#endregion
Modified: trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Diagnostics/ValidationBuildSessionTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -61,7 +61,7 @@
{
ValidationBuildSession session =
validatedSession(
- registry => registry.AddInstanceOf<IWidget>(new ColorWidget("Red")));
+ r => r.InstanceOf<IWidget>().Is.Object(new ColorWidget("Red")));
Assert.AreEqual(0, session.BuildErrors.Length);
}
@@ -122,7 +122,7 @@
{
ValidationBuildSession session =
validatedSession(
- registry => registry.AddInstanceOf<IWidget>(new ColorWidget("Red")));
+ registry => registry.InstanceOf<IWidget>().Is.Object(new ColorWidget("Red")));
Assert.AreEqual(0, session.ValidationErrors.Length);
}
Modified: trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -33,11 +33,11 @@
private void addColorMemento(string Color)
{
- _manager.Configure(registry =>
+ _manager.Configure(r =>
{
- registry.AddInstanceOf<Rule>().UsingConcreteType<ColorRule>().WithProperty("color").EqualTo(Color).WithName(Color);
- registry.AddInstanceOf<IWidget>().UsingConcreteType<ColorWidget>().WithProperty("color").EqualTo(Color).WithName(Color);
- registry.AddInstanceOf<WidgetMaker>().UsingConcreteType<ColorWidgetMaker>().WithProperty("color").EqualTo(Color).WithName(Color);
+ r.InstanceOf<Rule>().Is.OfConcreteType<ColorRule>().WithCtorArg("color").EqualTo(Color).WithName(Color);
+ r.InstanceOf<IWidget>().Is.OfConcreteType<ColorWidget>().WithCtorArg("color").EqualTo(Color).WithName(Color);
+ r.InstanceOf<WidgetMaker>().Is.OfConcreteType<ColorWidgetMaker>().WithCtorArg("color").EqualTo(Color).WithName(Color);
});
}
Modified: trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs 2008-09-15 01:47:31 UTC (rev 150)
+++ trunk/Source/StructureMap.Testing/Graph/DynamicInjectionTester.cs 2008-09-16 18:51:53 UTC (rev 151)
@@ -1,7 +1,6 @@
using System;
using System.Collections.Generic;
using NUnit.Framework;
-using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Pipeline;
using StructureMap.Testing.Pipeline;
@@ -18,7 +17,6 @@
[SetUp]
public void SetUp()
{
- ObjectFactory.Reset();
StructureMapConfiguration.ResetAll();
}
@@ -30,11 +28,90 @@
private IInstanceFactory getISomethingFactory()
{
- PluginFamily family = new PluginFamily(typeof (ISomething));
+ var family = new PluginFamily(typeof (ISomething));
return new InstanceFactory(family);
}
+ public interface IService<T>
+ {
+ }
+
+ public class Service1<T> : IService<T>
+ {
+ }
+
+ public class Service2<T> : IService<T>
+ {
+ }
+
+ public class Service3<T> : IService<T>
+ {
+ }
+
+ [PluginFamily("Default")]
+ public interface IThingy
+ {
+ }
+
+ [Pluggable("Default")]
+ public class TheThingy : IThingy
+ {
+ }
+
+
+ public class TheWidget : IWidget
+ {
+ #region IWidget Members
+
+ public void DoSomething()
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
[Test]
+ public void Add_an_assembly_in_the_Configure()
+ {
+ var container = new Container();
+ container.Configure(registry => { registry.ScanAssemblies().IncludeTheCallingAssembly(); });
+
+ Assert.IsInstanceOfType(typeof (TheThingy), container.GetInstance<IThingy>());
+ }
+
+ [Test]
+ public void Add_an_assembly_on_the_fly_and_pick_up_plugins()
+ {
+ var container = new Container();
+ container.Configure(
+ registry => { registry.ScanAssemblies().IncludeTheCallingAssembly().AddAllTypesOf<IWidget>(); });
+
+ IList<IWidget> instances = container.GetAllInstances<IWidget>();
+ bool found = false;
+ foreach (IWidget widget in instances)
+ {
+ found |= widget.GetType().Equals(typeof (TheWidget));
+ }
+
+ Assert.IsTrue(found);
+ }
+
+ [Test]
+ public void Add_generic_stuff_in_configure()
+ {
+ var container = new Container();
+ container.Configure(registry =>
+ {
+ registry.ForRequestedType(typeof (IService<>))
+ .AddConcreteType(typeof (Service1<>))
+ .AddConcreteType(typeof (Service2<>));
+ });
+
+ Assert.AreEqual(2, container.GetAllInstances<IService<string>>().Count);
+ }
+
+ [Test]
public void AddANewDefaultTypeForAPluginTypeThatAlreadyExists()
{
StructureMapConfiguration.BuildInstancesOf<ISomething>().TheDefaultIsConcreteType<SomethingTwo>();
@@ -55,7 +132,7 @@
[Test]
public void AddInstanceFromObjectFactory()
{
- SomethingOne one = new SomethingOne();
+ var one = new SomethingOne();
ObjectFactory.Inject<ISomething>(one);
Assert.AreSame(one, ObjectFactory.GetInstance<ISomething>());
@@ -65,10 +142,13 @@
public void AddInstanceToInstanceManagerWhenTheInstanceFactoryDoesNotExist()
{
IContainer container = new Container(new PluginGraph());
- container.Configure(registry =>
+ container.Configure(r =>
{
- registry.AddInstanceOf(_red).WithName("Red");
- registry.AddInstanceOf(_blue).WithName("Blue");
+ r.ForRequestedType<IService>().AddInstances(x =>
+ {
+ x.Object(_red).WithName("Red");
+ x.Object(_blue).WithName("Blue");
+ });
});
Assert.AreSame(_red, container.GetInstance(typeof (IService), "Red"));
@@ -79,10 +159,13 @@
[Test]
public void AddNamedInstanceByType()
{
- ObjectFactory.Configure(registry =>
+ ObjectFactory.Configure(r =>
{
- registry.AddInstanceOf<ISomething>().UsingConcreteType<SomethingOne>().WithName("One");
- registry.AddInstanceOf<ISomething>().UsingConcreteType<SomethingTwo>().WithName("Two");
+ r.ForRequestedType<ISomething>().AddInstances(x =>
+ {
+ x.OfConcreteType<SomethingOne>().WithName("One");
+ x.OfConcreteType<SomethingTwo>().WithName("Two");
+ });
});
Assert.IsInstanceOfType(typeof (SomethingOne), ObjectFactory.GetNamedInstance<ISomething>("One"));
@@ -92,13 +175,16 @@
[Test]
public void AddNamedInstanceToobjectFactory()
{
- SomethingOne one = new SomethingOne();
- SomethingOne two = new SomethingOne();
+ var one = new SomethingOne();
+ var two = new SomethingOne();
- ObjectFactory.Configure(registry =>
+ ObjectFactory.Configure(r =>
{
- registry.AddInstanceOf<ISomething>(one).WithName("One");
- registry.AddInstanceOf<ISomething>(two).WithName("Two");
+ r.ForRequestedType<ISomething>().AddInstances(x =>
+ {
+ x.Object(one).WithName("One");
+ x.Object(two).WithName("Two");
+ });
});
Assert.AreSame(one, ObjectFactory.GetNamedInstance<ISomething>("One"));
@@ -109,10 +195,10 @@
[Test]
public void AddPluginForTypeWhenThePluginDoesNotAlreadyExistsDoesNothing()
{
- PluginGraph pluginGraph = new PluginGraph();
+ var pluginGraph = new PluginGraph();
IContainer container = new Container(pluginGraph);
container.Configure(
- registry => { registry.AddInstanceOf<ISomething>().UsingConcreteType<SomethingOne>(); });
+ r => { r.In...
[truncated message content] |