|
From: <jer...@us...> - 2008-10-03 14:48:09
|
Revision: 163
http://structuremap.svn.sourceforge.net/structuremap/?rev=163&view=rev
Author: jeremydmiller
Date: 2008-10-03 14:47:59 +0000 (Fri, 03 Oct 2008)
Log Message:
-----------
doing some work for querying the state of the container
Modified Paths:
--------------
trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
trunk/Source/StructureMap/Graph/PluginFamily.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap/IInstanceFactory.cs
trunk/Source/StructureMap/InstanceFactory.cs
trunk/Source/StructureMap/ObjectFactory.cs
trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
trunk/Source/StructureMap/Pipeline/Instance.cs
trunk/Source/StructureMap/Pipeline/Profile.cs
trunk/Source/StructureMap/Pipeline/ProfileManager.cs
trunk/Source/StructureMap/PipelineGraph.cs
trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs
trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
trunk/Source/StructureMap.Testing/PipelineGraphTester.cs
Modified: trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs
===================================================================
--- trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/Graph/GenericsPluginGraph.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -1,4 +1,5 @@
using System;
+using System.Collections;
using System.Collections.Generic;
using StructureMap.Pipeline;
using StructureMap.Util;
@@ -19,6 +20,17 @@
get { return _families.Count; }
}
+ public IEnumerable<PluginTypeConfiguration> Families
+ {
+ get
+ {
+ foreach (var family in _families)
+ {
+ yield return family.GetConfiguration();
+ }
+ }
+ }
+
public static bool CanBeCast(Type pluginType, Type pluggedType)
{
try
@@ -101,9 +113,6 @@
{
PluginFamily templatedFamily = baseFamily.CreateTemplatedClone(templateTypes);
-
-
-
return templatedFamily;
}
@@ -155,5 +164,10 @@
{
return _families.Retrieve(pluginType);
}
+
+ public bool HasFamily(Type pluginType)
+ {
+ return _families.Has(pluginType);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Graph/PluginFamily.cs
===================================================================
--- trunk/Source/StructureMap/Graph/PluginFamily.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/Graph/PluginFamily.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -257,6 +257,11 @@
get { return _instances.Count; }
}
+ public IEnumerable<IInstance> Instances
+ {
+ get { return _instances.GetAll(); }
+ }
+
#endregion
public Plugin FindPlugin(Type pluggedType)
@@ -356,5 +361,16 @@
AddPlugin(concreteType, name);
}
}
+
+ public PluginTypeConfiguration GetConfiguration()
+ {
+ return new PluginTypeConfiguration()
+ {
+ Instance = GetDefaultInstance(),
+ PluginType = PluginType,
+ Policy = _buildPolicy,
+ Instances = Instances
+ };
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/IContainer.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -34,9 +34,6 @@
string WhatDoIHave();
-
-
-
/// <summary>
/// Creates a new object instance of the requested type
/// </summary>
@@ -70,5 +67,6 @@
void AssertConfigurationIsValid();
object GetInstance(Type type, ExplicitArguments args);
PluginGraph PluginGraph { get; }
+ void EjectAllInstancesOf<T>();
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/IInstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/IInstanceFactory.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/IInstanceFactory.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -1,5 +1,6 @@
using System;
using System.Collections;
+using System.Collections.Generic;
using StructureMap.Graph;
using StructureMap.Pipeline;
@@ -11,6 +12,8 @@
public interface IInstanceFactory
{
Type PluginType { get; }
+ IEnumerable<IInstance> Instances { get; }
+ IBuildPolicy Policy { get; }
void AddInstance(Instance instance);
Instance AddType<T>();
Modified: trunk/Source/StructureMap/InstanceFactory.cs
===================================================================
--- trunk/Source/StructureMap/InstanceFactory.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/InstanceFactory.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -79,6 +79,16 @@
get { return _pluginType; }
}
+ public IEnumerable<IInstance> Instances
+ {
+ get { return _instances.GetAll(); }
+ }
+
+ public IBuildPolicy Policy
+ {
+ get { return _policy; }
+ }
+
public void ForEachInstance(Action<Instance> action)
{
_instances.Each(action);
Modified: trunk/Source/StructureMap/ObjectFactory.cs
===================================================================
--- trunk/Source/StructureMap/ObjectFactory.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/ObjectFactory.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -2,8 +2,6 @@
using System.Collections;
using System.Collections.Generic;
using System.Security.Permissions;
-using StructureMap.Configuration.DSL;
-using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Pipeline;
@@ -14,7 +12,7 @@
/// <summary>
/// The main static Facade for the StructureMap container
/// </summary>
- [EnvironmentPermission(SecurityAction.Assert, Read="COMPUTERNAME")]
+ [EnvironmentPermission(SecurityAction.Assert, Read = "COMPUTERNAME")]
public class ObjectFactory
{
private static readonly object _lockObject = new object();
@@ -44,17 +42,17 @@
public static void Initialize(Action<InitializationExpression> action)
{
- lock (typeof(ObjectFactory))
+ lock (typeof (ObjectFactory))
{
- InitializationExpression expression = new InitializationExpression();
+ var expression = new InitializationExpression();
action(expression);
- var graph = expression.BuildGraph();
+ PluginGraph graph = expression.BuildGraph();
StructureMapConfiguration.Seal();
_container = new Container(graph);
Profile = expression.DefaultProfileName;
- }
+ }
}
@@ -94,30 +92,26 @@
[Obsolete("Please use Inject() instead.")]
public static void InjectStub<PLUGINTYPE>(PLUGINTYPE stub)
{
- Inject<PLUGINTYPE>(stub);
+ Inject(stub);
}
public static void Inject<PLUGINTYPE>(PLUGINTYPE instance)
{
- container.Inject<PLUGINTYPE>(instance);
+ container.Inject(instance);
}
public static void Inject<PLUGINTYPE>(string name, PLUGINTYPE instance)
{
- container.Inject<PLUGINTYPE>(name, instance);
+ container.Inject(name, instance);
}
[Obsolete("Please use Inject<PLUGINTYPE>(name) instead.")]
public static void InjectStub<PLUGINTYPE>(string name, PLUGINTYPE stub)
{
- Inject<PLUGINTYPE>(name, stub);
+ Inject(name, stub);
}
-
-
-
-
public static string WhatDoIHave()
{
return container.WhatDoIHave();
@@ -128,7 +122,114 @@
container.AssertConfigurationIsValid();
}
+ /// <summary>
+ /// Returns and/or constructs the default instance of the requested System.Type
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ public static object GetInstance(Type pluginType)
+ {
+ return container.GetInstance(pluginType);
+ }
+ /// <summary>
+ /// Returns and/or constructs the default instance of the requested System.Type
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ public static PLUGINTYPE GetInstance<PLUGINTYPE>()
+ {
+ return (PLUGINTYPE) container.GetInstance(typeof (PLUGINTYPE));
+ }
+
+ public static object GetInstance(Type TargetType, Instance instance)
+ {
+ return container.GetInstance(TargetType, instance);
+ }
+
+ public static TargetType GetInstance<TargetType>(Instance instance)
+ {
+ return (TargetType) container.GetInstance(typeof (TargetType), instance);
+ }
+
+ /// <summary>
+ /// Retrieves an instance of pluginType by name
+ /// </summary>
+ /// <param name="pluginType">The PluginType</param>
+ /// <param name="name">The instance name</param>
+ /// <returns></returns>
+ public static object GetNamedInstance(Type pluginType, string name)
+ {
+ return container.GetInstance(pluginType, name);
+ }
+
+ /// <summary>
+ /// Retrieves an instance of PLUGINTYPE by name
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE">The PluginType</typeparam>
+ /// <param name="name">The instance name</param>
+ /// <returns></returns>
+ public static PLUGINTYPE GetNamedInstance<PLUGINTYPE>(string name)
+ {
+ return (PLUGINTYPE) container.GetInstance(typeof (PLUGINTYPE), name);
+ }
+
+ public static void SetDefaultInstanceName(Type TargetType, string InstanceName)
+ {
+ container.SetDefault(TargetType, InstanceName);
+ }
+
+ public static void SetDefaultInstanceName<TargetType>(string InstanceName)
+ {
+ container.SetDefault(typeof (TargetType), InstanceName);
+ }
+
+ /// <summary>
+ /// Retrieves all instances of the pluginType
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <returns></returns>
+ public static IList GetAllInstances(Type pluginType)
+ {
+ return container.GetAllInstances(pluginType);
+ }
+
+ /// <summary>
+ /// Retrieves all instances of the PLUGINTYPE
+ /// </summary>
+ /// <typeparam name="PLUGINTYPE"></typeparam>
+ /// <returns></returns>
+ public static IList<PLUGINTYPE> GetAllInstances<PLUGINTYPE>()
+ {
+ return container.GetAllInstances<PLUGINTYPE>();
+ }
+
+ /// <summary>
+ /// Pass in an explicit argument of Type T
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="arg"></param>
+ /// <returns></returns>
+ public static ExplicitArgsExpression With<T>(T arg)
+ {
+ return container.With(arg);
+ }
+
+ /// <summary>
+ /// Pass in an explicit argument by name
+ /// </summary>
+ /// <param name="argName"></param>
+ /// <returns></returns>
+ public static IExplicitProperty With(string argName)
+ {
+ return container.With(argName);
+ }
+
+ public static void EjectAllInstancesOf<T>()
+ {
+ container.EjectAllInstancesOf<T>();
+ }
+
#region Container and setting defaults
private static IContainer container
@@ -149,7 +250,6 @@
return _container;
}
}
-
public static string Profile
@@ -185,7 +285,7 @@
{
container.SetDefault(pluginType, instance);
}
-
+
public static void SetDefault<PLUGINTYPE>(Instance instance)
{
container.SetDefault<PLUGINTYPE>(instance);
@@ -232,120 +332,12 @@
PluginGraph graph = StructureMapConfiguration.GetPluginGraph();
StructureMapConfiguration.Seal();
- Container container = new Container(graph);
+ var container = new Container(graph);
container.SetDefaultsToProfile(_profile);
return container;
}
#endregion
-
-
- /// <summary>
- /// Returns and/or constructs the default instance of the requested System.Type
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- public static object GetInstance(Type pluginType)
- {
- return container.GetInstance(pluginType);
- }
-
- /// <summary>
- /// Returns and/or constructs the default instance of the requested System.Type
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- public static PLUGINTYPE GetInstance<PLUGINTYPE>()
- {
- return (PLUGINTYPE) container.GetInstance(typeof (PLUGINTYPE));
- }
-
- public static object GetInstance(Type TargetType, Instance instance)
- {
- return container.GetInstance(TargetType, instance);
- }
-
- public static TargetType GetInstance<TargetType>(Instance instance)
- {
- return (TargetType) container.GetInstance(typeof (TargetType), instance);
- }
-
- /// <summary>
- /// Retrieves an instance of pluginType by name
- /// </summary>
- /// <param name="pluginType">The PluginType</param>
- /// <param name="name">The instance name</param>
- /// <returns></returns>
- public static object GetNamedInstance(Type pluginType, string name)
- {
- return container.GetInstance(pluginType, name);
- }
-
- /// <summary>
- /// Retrieves an instance of PLUGINTYPE by name
- /// </summary>
- /// <typeparam name="PLUGINTYPE">The PluginType</typeparam>
- /// <param name="name">The instance name</param>
- /// <returns></returns>
- public static PLUGINTYPE GetNamedInstance<PLUGINTYPE>(string name)
- {
- return (PLUGINTYPE) container.GetInstance(typeof (PLUGINTYPE), name);
- }
-
- public static void SetDefaultInstanceName(Type TargetType, string InstanceName)
- {
- container.SetDefault(TargetType, InstanceName);
- }
-
- public static void SetDefaultInstanceName<TargetType>(string InstanceName)
- {
- container.SetDefault(typeof (TargetType), InstanceName);
- }
-
- /// <summary>
- /// Retrieves all instances of the pluginType
- /// </summary>
- /// <param name="pluginType"></param>
- /// <returns></returns>
- public static IList GetAllInstances(Type pluginType)
- {
- return container.GetAllInstances(pluginType);
- }
-
- /// <summary>
- /// Retrieves all instances of the PLUGINTYPE
- /// </summary>
- /// <typeparam name="PLUGINTYPE"></typeparam>
- /// <returns></returns>
- public static IList<PLUGINTYPE> GetAllInstances<PLUGINTYPE>()
- {
- return container.GetAllInstances<PLUGINTYPE>();
- }
-
- /// <summary>
- /// Pass in an explicit argument of Type T
- /// </summary>
- /// <typeparam name="T"></typeparam>
- /// <param name="arg"></param>
- /// <returns></returns>
- public static ExplicitArgsExpression With<T>(T arg)
- {
- return container.With(arg);
- }
-
- /// <summary>
- /// Pass in an explicit argument by name
- /// </summary>
- /// <param name="argName"></param>
- /// <returns></returns>
- public static IExplicitProperty With(string argName)
- {
- return container.With(argName);
- }
-
-
}
-
-
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -46,7 +46,7 @@
protected override string getDescription()
{
- string typeName = TypePath.GetAssemblyQualifiedName(_pluggedType);
+ string typeName = _pluggedType.AssemblyQualifiedName;
Constructor ctor = new Constructor(_pluggedType);
if (ctor.HasArguments())
{
Modified: trunk/Source/StructureMap/Pipeline/Instance.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Instance.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/Pipeline/Instance.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -16,14 +16,20 @@
}
}
- public interface IDiagnosticInstance
+ public interface IInstance
{
+ string Name { get; }
+ Type ConcreteType { get; }
+ string Description { get; }
+ }
+
+ public interface IDiagnosticInstance : IInstance
+ {
bool CanBePartOfPluginFamily(PluginFamily family);
Instance FindInstanceForProfile(PluginFamily family, string profileName, GraphLog log);
InstanceToken CreateToken();
void Preprocess(PluginFamily family);
void AddTemplatedInstanceTo(PluginFamily family, Type[] templateTypes);
- Type ConcreteType { get; }
}
public abstract class Instance : IDiagnosticInstance
@@ -126,11 +132,16 @@
addTemplatedInstanceTo(family, templateTypes);
}
- Type IDiagnosticInstance.ConcreteType
+ Type IInstance.ConcreteType
{
get { return getConcreteType(null); }
}
+ string IInstance.Description
+ {
+ get { return getDescription(); }
+ }
+
protected virtual Type getConcreteType(Type pluginType)
{
return pluginType;
Modified: trunk/Source/StructureMap/Pipeline/Profile.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/Profile.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/Pipeline/Profile.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -108,5 +108,9 @@
}
+ public void Remove<T>()
+ {
+ _instances.Remove(typeof (T));
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/Pipeline/ProfileManager.cs
===================================================================
--- trunk/Source/StructureMap/Pipeline/ProfileManager.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/Pipeline/ProfileManager.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -231,5 +231,14 @@
CurrentProfile = CurrentProfile;
}
+
+ public void EjectAllInstancesOf<T>()
+ {
+ _currentProfile.Remove<T>();
+ foreach (var pair in _profiles)
+ {
+ pair.Value.Remove<T>();
+ }
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/PipelineGraph.cs
===================================================================
--- trunk/Source/StructureMap/PipelineGraph.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap/PipelineGraph.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -3,17 +3,28 @@
using StructureMap.Diagnostics;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using System.Linq;
namespace StructureMap
{
public delegate InstanceFactory MissingFactoryFunction(Type pluginType, ProfileManager profileManager);
+ [Obsolete("I think we can eliminate this in favor of IEnumerable")]
public interface IPipelineGraphVisitor
{
void PluginType(Type pluginType, Instance defaultInstance, IBuildPolicy policy);
void Instance(Type pluginType, Instance instance);
}
+ public class PluginTypeConfiguration
+ {
+ public Type PluginType { get; set; }
+ public IInstance Instance { get; set; }
+ public IBuildPolicy Policy { get; set; }
+
+ public IEnumerable<IInstance> Instances { get; set; }
+ }
+
public class PipelineGraph
{
private readonly Dictionary<Type, IInstanceFactory> _factories
@@ -166,6 +177,7 @@
public void SetDefault(Type pluginType, Instance instance)
{
createFactoryIfMissing(pluginType);
+ ForType(pluginType).AddInstance(instance);
_profileManager.SetDefault(pluginType, instance);
}
@@ -195,6 +207,43 @@
public void EjectAllInstancesOf<T>()
{
ForType(typeof (T)).EjectAllInstances();
+ _profileManager.EjectAllInstancesOf<T>();
}
+
+ public IEnumerable<IInstance> InstancesOf(Type pluginType)
+ {
+ if (_genericsGraph.HasFamily(pluginType))
+ {
+ return _genericsGraph.FindFamily(pluginType).Instances;
+ }
+
+ return ForType(pluginType).Instances;
+ }
+
+ public IEnumerable<PluginTypeConfiguration> PluginTypes
+ {
+ get
+ {
+ foreach (PluginTypeConfiguration configuration in _genericsGraph.Families)
+ {
+ yield return configuration;
+ }
+
+ foreach (var pair in _factories)
+ {
+ var factory = pair.Value;
+
+ yield return new PluginTypeConfiguration()
+ {
+ Instance = _profileManager.GetDefault(factory.PluginType),
+ PluginType = factory.PluginType,
+ Policy = factory.Policy,
+ Instances = factory.Instances
+ };
+ }
+ }
+
+
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap.Testing/Configuration/DSL/RegistryIntegratedTester.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -27,7 +27,11 @@
[Test]
public void AutomaticallyFindRegistryFromAssembly()
{
- ObjectFactory.Initialize(x => { x.Scan(s => { s.AssemblyContainingType<RedGreenRegistry>(); }); });
+ ObjectFactory.Initialize(x => { x.Scan(s =>
+ {
+ s.AssemblyContainingType<RedGreenRegistry>();
+ s.LookForRegistries();
+ }); });
var colors = new List<string>();
foreach (IWidget widget in ObjectFactory.GetAllInstances<IWidget>())
@@ -57,6 +61,7 @@
var scanner = new AssemblyScanner();
scanner.AssemblyContainingType(typeof (RedGreenRegistry));
+ scanner.LookForRegistries();
scanner.ScanForAll(graph);
graph.Seal();
Modified: trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap.Testing/Graph/GenericsPluginGraphTester.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -1,7 +1,10 @@
using System;
using NUnit.Framework;
+using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Testing.GenericWidgets;
+using System.Linq;
namespace StructureMap.Testing.Graph
{
@@ -27,7 +30,16 @@
Assert.IsFalse(GenericsPluginGraph.CanBeCast(pluginType, pluggedType));
}
+ [Test]
+ public void can_iterate_through_families()
+ {
+ GenericsPluginGraph graph = new GenericsPluginGraph();
+ graph.FindFamily(typeof(IGenericService<>)).AddType(typeof(GenericService<>));
+ graph.FindFamily(typeof(IService<>)).AddType(typeof(Service<>));
+ graph.Families.Count().ShouldEqual(2);
+ }
+
[Test]
public void Check_the_generic_plugin_family_expression()
{
Modified: trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap.Testing/Graph/PluginFamilyTester.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Data;
+using System.Linq;
using System.Reflection;
using NUnit.Framework;
using StructureMap.Attributes;
@@ -33,6 +34,29 @@
}
[Test]
+ public void can_get_configuration_object_from_PluginFamily()
+ {
+ PluginFamily family = new PluginFamily(typeof(IWidget));
+
+ var instance1 = new SmartInstance<ColorWidget>().WithCtorArg("color").EqualTo("Red");
+ var instance2 = new SmartInstance<ColorWidget>().WithCtorArg("color").EqualTo("Blue");
+
+ family.AddInstance(instance1);
+ family.AddInstance(instance2);
+
+ family.DefaultInstanceKey = instance1.Name;
+
+ var configuration = family.GetConfiguration();
+
+ configuration.Instance.ShouldBeTheSameAs(instance1);
+ configuration.PluginType.ShouldEqual(typeof (IWidget));
+ configuration.Policy.ShouldBeTheSameAs(family.Policy);
+
+ configuration.Instances.Count().ShouldEqual(2);
+ }
+
+
+ [Test]
public void add_plugins_at_seal_from_the_list_of_types()
{
var family = new PluginFamily(typeof (IServiceProvider));
Modified: trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -138,7 +138,7 @@
public void Create_description_if_has_plugged_type_and_plugged_type_has_no_arguments()
{
var instance = new ConfiguredInstance(GetType());
- TestUtility.AssertDescriptionIs(instance, TypePath.GetAssemblyQualifiedName(GetType()));
+ TestUtility.AssertDescriptionIs(instance, GetType().AssemblyQualifiedName);
}
[Test]
@@ -146,7 +146,7 @@
{
var instance = new ConfiguredInstance(typeof (ColorService));
TestUtility.AssertDescriptionIs(instance,
- "Configured " + TypePath.GetAssemblyQualifiedName(typeof (ColorService)));
+ "Configured " + typeof (ColorService).AssemblyQualifiedName);
}
[Test]
Modified: trunk/Source/StructureMap.Testing/PipelineGraphTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/PipelineGraphTester.cs 2008-10-02 18:44:00 UTC (rev 162)
+++ trunk/Source/StructureMap.Testing/PipelineGraphTester.cs 2008-10-03 14:47:59 UTC (rev 163)
@@ -1,12 +1,15 @@
using System;
+using System.Diagnostics;
using NUnit.Framework;
using Rhino.Mocks;
using Rhino.Mocks.Constraints;
using StructureMap.Configuration.DSL;
using StructureMap.Graph;
using StructureMap.Pipeline;
+using StructureMap.Testing.GenericWidgets;
using StructureMap.Testing.Graph;
using StructureMap.Testing.Widget;
+using System.Linq;
namespace StructureMap.Testing
{
@@ -62,8 +65,80 @@
LastCall.Constraints(Is.Equal(typeof(ISomething)), Is.TypeOf(typeof(SmartInstance<SomethingTwo>)));
});
}
+
+ [Test]
+ public void can_iterate_through_instances_of_pipelineGraph_for_generics_if_not_registered()
+ {
+ PipelineGraph pipeline = new PipelineGraph(new PluginGraph());
+ pipeline.InstancesOf(typeof(IService<>)).Count().ShouldEqual(0);
+ }
[Test]
+ public void can_iterate_through_families_including_both_generics_and_normal()
+ {
+ Registry registry = new Registry();
+ registry.ForRequestedType(typeof(IService<>))
+ .AddConcreteType(typeof(Service<>))
+ .AddConcreteType(typeof(Service2<>));
+
+ registry.BuildInstancesOf<ISomething>()
+ .TheDefaultIsConcreteType<SomethingOne>()
+ .AddConcreteType<SomethingTwo>();
+
+ PluginGraph graph = registry.Build();
+ PipelineGraph pipeline = new PipelineGraph(graph);
+
+ pipeline.PluginTypes.Count().ShouldEqual(2);
+ }
+
+ [Test]
+ public void can_iterate_through_instance_of_pipelineGraph_for_generics()
+ {
+ Registry registry = new Registry();
+ registry.ForRequestedType(typeof (IService<>))
+ .AddConcreteType(typeof (Service<>))
+ .AddConcreteType(typeof (Service2<>));
+
+ var graph = registry.Build();
+ var pipeline = new PipelineGraph(graph);
+
+ foreach (var instance in pipeline.InstancesOf(typeof(IService<>)))
+ {
+ Debug.WriteLine(instance.Description);
+ }
+
+ pipeline.InstancesOf(typeof (IService<>)).Count().ShouldEqual(2);
+ }
+
+ [Test]
+ public void can_iterate_through_instances_of_pipelineGraph_on_a_type_that_is_registered()
+ {
+ Registry registry = new Registry();
+ registry.BuildInstancesOf<ISomething>()
+ .TheDefaultIsConcreteType<SomethingOne>()
+ .AddConcreteType<SomethingTwo>();
+
+ PluginGraph graph = registry.Build();
+
+ PipelineGraph pipeline = new PipelineGraph(graph);
+
+ pipeline.InstancesOf(typeof(ISomething)).Count().ShouldEqual(2);
+
+ pipeline.Inject<ISomething>(new SomethingTwo());
+
+ pipeline.InstancesOf(typeof(ISomething)).Count().ShouldEqual(3);
+ }
+
+ [Test]
+ public void can_iterate_through_empty_array_of_pipelineGraph_for_a_type_that_is_not_registered()
+ {
+ PluginGraph graph = new PluginGraph();
+ PipelineGraph pipeline = new PipelineGraph(graph);
+
+ pipeline.InstancesOf(typeof(ISomething)).Count().ShouldEqual(0);
+ }
+
+ [Test]
public void Visit_a_single_family_with_no_default()
{
Registry registry = new Registry();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|