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