|
From: <jer...@us...> - 2008-09-17 07:09:23
|
Revision: 153
http://structuremap.svn.sourceforge.net/structuremap/?rev=153&view=rev
Author: jeremydmiller
Date: 2008-09-17 14:09:19 +0000 (Wed, 17 Sep 2008)
Log Message:
-----------
added Container.With<T>(T arg).GetAllInstances<T>()
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/ExplicitArgsExpression.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2008-09-17 13:48:01 UTC (rev 152)
+++ trunk/Source/StructureMap/Container.cs 2008-09-17 14:09:19 UTC (rev 153)
@@ -104,6 +104,15 @@
return session.CreateInstance(type, instance);
}
+ public IList<T> GetAllInstances<T>(ExplicitArguments args)
+ {
+ BuildSession session = withNewSession();
+
+ args.RegisterDefaults(session);
+
+ return getListOfTypeWithSession<T>(session);
+ }
+
public void Inject<PLUGINTYPE>(PLUGINTYPE instance)
{
_pipelineGraph.Inject(instance);
@@ -128,10 +137,13 @@
public IList<T> GetAllInstances<T>()
{
- List<T> list = new List<T>();
-
BuildSession session = withNewSession();
+ return getListOfTypeWithSession<T>(session);
+ }
+ private IList<T> getListOfTypeWithSession<T>(BuildSession session)
+ {
+ List<T> list = new List<T>();
foreach (T instance in forType(typeof (T)).GetAllInstances(session))
{
list.Add(instance);
@@ -157,6 +169,8 @@
}
+
+
/// <summary>
/// Creates a new object instance of the requested type
/// </summary>
Modified: trunk/Source/StructureMap/ExplicitArgsExpression.cs
===================================================================
--- trunk/Source/StructureMap/ExplicitArgsExpression.cs 2008-09-17 13:48:01 UTC (rev 152)
+++ trunk/Source/StructureMap/ExplicitArgsExpression.cs 2008-09-17 14:09:19 UTC (rev 153)
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using StructureMap.Pipeline;
namespace StructureMap
@@ -14,9 +15,9 @@
private readonly IContainer _container;
private string _lastArgName;
- internal ExplicitArgsExpression(IContainer manager)
+ internal ExplicitArgsExpression(IContainer container)
{
- _container = manager;
+ _container = container;
}
#region IExplicitProperty Members
@@ -71,5 +72,10 @@
{
return _container.GetInstance(type, _args);
}
+
+ public IList<T> GetAllInstances<T>()
+ {
+ return _container.GetAllInstances<T>(_args);
+ }
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2008-09-17 13:48:01 UTC (rev 152)
+++ trunk/Source/StructureMap/IContainer.cs 2008-09-17 14:09:19 UTC (rev 153)
@@ -62,7 +62,8 @@
/// <returns></returns>
object GetInstance(Type pluginType, string instanceKey);
- PLUGINTYPE GetInstance<PLUGINTYPE>(ExplicitArguments args);
+ IList<T> GetAllInstances<T>(ExplicitArguments args);
+ T GetInstance<T>(ExplicitArguments args);
ExplicitArgsExpression With<T>(T arg);
IExplicitProperty With(string argName);
Modified: trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs 2008-09-17 13:48:01 UTC (rev 152)
+++ trunk/Source/StructureMap.Testing/Graph/ExplicitArgumentTester.cs 2008-09-17 14:09:19 UTC (rev 153)
@@ -284,6 +284,22 @@
args.SetArg("age", 34);
Assert.AreEqual(34, args.GetArg("age"));
}
+
+ [Test]
+ public void pass_explicit_service_into_all_instances()
+ {
+ var container = new Container(r =>
+ {
+ r.ForRequestedType<TradeView>().TheDefaultIsConcreteType<TradeView>().AddConcreteType<SecuredTradeView>();
+ });
+
+ Trade theTrade = new Trade();
+
+ var views = container.With<Trade>(theTrade).GetAllInstances<TradeView>();
+
+ views[0].Trade.ShouldBeTheSameAs(theTrade);
+ views[1].Trade.ShouldBeTheSameAs(theTrade);
+ }
}
public class Lump
@@ -326,6 +342,13 @@
}
}
+ public class SecuredTradeView : TradeView
+ {
+ public SecuredTradeView(Trade trade) : base(trade)
+ {
+ }
+ }
+
public class Node
{
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|