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