|
From: <fli...@us...> - 2008-10-21 22:02:28
|
Revision: 188
http://structuremap.svn.sourceforge.net/structuremap/?rev=188&view=rev
Author: flimflan
Date: 2008-10-21 22:02:21 +0000 (Tue, 21 Oct 2008)
Log Message:
-----------
- Added TryGetInstance to container
Modified Paths:
--------------
trunk/Source/StructureMap/Container.cs
trunk/Source/StructureMap/IContainer.cs
trunk/Source/StructureMap.Testing/Examples.cs
trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
Modified: trunk/Source/StructureMap/Container.cs
===================================================================
--- trunk/Source/StructureMap/Container.cs 2008-10-18 20:49:21 UTC (rev 187)
+++ trunk/Source/StructureMap/Container.cs 2008-10-21 22:02:21 UTC (rev 188)
@@ -7,6 +7,7 @@
using StructureMap.Graph;
using StructureMap.Interceptors;
using StructureMap.Pipeline;
+using System.Linq;
namespace StructureMap
{
@@ -215,8 +216,56 @@
return withNewSession().CreateInstance(pluginType, instanceKey);
}
+ /// <summary>
+ /// Creates or finds the named instance of the pluginType. Returns null if the named instance is not known to the container.
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="instanceKey"></param>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ public object TryGetInstance(Type pluginType, string instanceKey)
+ {
+ return _pipelineGraph.ForType(pluginType).FindInstance(instanceKey) == null
+ ? null
+ : GetInstance(pluginType, instanceKey);
+ }
/// <summary>
+ /// Creates or finds the default instance of the pluginType. Returns null if the pluginType is not known to the container.
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ public object TryGetInstance(Type pluginType)
+ {
+ return !_pipelineGraph.PluginTypes.Any(p => p.PluginType == pluginType)
+ ? null
+ : GetInstance(pluginType);
+ }
+
+ /// <summary>
+ /// Creates or finds the default instance of type T. Returns the default value of T if it is not known to the container.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ public T TryGetInstance<T>()
+ {
+ return (T)(TryGetInstance(typeof (T)) ?? default(T));
+ }
+
+ /// <summary>
+ /// Creates or finds the named instance of type T. Returns the default value of T if the named instance is not known to the container.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ public T TryGetInstance<T>(string instanceKey)
+ {
+ return (T)(TryGetInstance(typeof(T), instanceKey) ?? default(T));
+ }
+
+ /// <summary>
/// Creates or finds the default instance of the pluginType
/// </summary>
/// <param name="pluginType"></param>
Modified: trunk/Source/StructureMap/IContainer.cs
===================================================================
--- trunk/Source/StructureMap/IContainer.cs 2008-10-18 20:49:21 UTC (rev 187)
+++ trunk/Source/StructureMap/IContainer.cs 2008-10-21 22:02:21 UTC (rev 188)
@@ -76,6 +76,40 @@
/// <returns></returns>
IList GetAllInstances(Type pluginType);
+ /// <summary>
+ /// Creates or finds the named instance of the pluginType. Returns null if the named instance is not known to the container.
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="instanceKey"></param>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ object TryGetInstance(Type pluginType, string instanceKey);
+
+ /// <summary>
+ /// Creates or finds the default instance of the pluginType. Returns null if the pluginType is not known to the container.
+ /// </summary>
+ /// <param name="pluginType"></param>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ object TryGetInstance(Type pluginType);
+
+ /// <summary>
+ /// Creates or finds the default instance of type T. Returns the default value of T if it is not known to the container.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ T TryGetInstance<T>();
+
+ /// <summary>
+ /// Creates or finds the named instance of type T. Returns the default value of T if the named instance is not known to the container.
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ /// <param name="instance"></param>
+ /// <returns></returns>
+ T TryGetInstance<T>(string instanceKey);
+
+
[Obsolete("Please use GetInstance<T>() instead.")]
T FillDependencies<T>();
@@ -188,6 +222,5 @@
/// </summary>
/// <typeparam name="T"></typeparam>
void EjectAllInstancesOf<T>();
-
}
}
\ No newline at end of file
Modified: trunk/Source/StructureMap.Testing/Examples.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Examples.cs 2008-10-18 20:49:21 UTC (rev 187)
+++ trunk/Source/StructureMap.Testing/Examples.cs 2008-10-21 22:02:21 UTC (rev 188)
@@ -7,7 +7,7 @@
using StructureMap.Configuration.DSL;
using StructureMap.Testing.Widget3;
-namespace StructureMap.Testing
+namespace StructureMap.Testing.DocumentationExamples
{
public interface IDataProvider
{
Modified: trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs 2008-10-18 20:49:21 UTC (rev 187)
+++ trunk/Source/StructureMap.Testing/Graph/AssemblyScannerTester.cs 2008-10-21 22:02:21 UTC (rev 188)
@@ -63,7 +63,9 @@
var scanner = new AssemblyScanner();
action(scanner);
theGraph = new PluginGraph();
+ scanner.ExcludeNamespaceContainingType<DocumentationExamples.ScanningRegistry>();
scanner.ScanForAll(theGraph);
+ theGraph.Log.AssertFailures();
}
@@ -129,7 +131,7 @@
}
[Test]
- public void Search_for_registries_by_default()
+ public void Search_for_registries_when_explicitly_told()
{
Scan(x =>
{
Modified: trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs
===================================================================
--- trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs 2008-10-18 20:49:21 UTC (rev 187)
+++ trunk/Source/StructureMap.Testing/Graph/ContainerTester.cs 2008-10-21 22:02:21 UTC (rev 188)
@@ -195,6 +195,82 @@
Assert.AreEqual("Orange", maker.Color);
}
+ [Test]
+ public void TryGetInstanceViaName_ReturnsNull_WhenNotFound()
+ {
+ addColorInstance("Red");
+ addColorInstance("Orange");
+ addColorInstance("Blue");
+
+ var rule = _container.TryGetInstance(typeof(Rule), "Yellow");
+ rule.ShouldBeNull();
+ }
+
+ [Test]
+ public void TryGetInstanceViaName_ReturnsTheOutInstance_WhenFound()
+ {
+ addColorInstance("Red");
+ addColorInstance("Orange");
+ addColorInstance("Blue");
+
+ var rule = _container.TryGetInstance(typeof(Rule), "Orange");
+ rule.ShouldBeOfType(typeof(ColorRule));
+ }
+
+ [Test]
+ public void TryGetInstance_ReturnsNull_WhenTypeNotFound()
+ {
+ var instance = _container.TryGetInstance(typeof(IProvider));
+ instance.ShouldBeNull();
+ }
+
+ [Test]
+ public void TryGetInstance_ReturnsInstance_WhenTypeFound()
+ {
+ _container.Configure(c => c.ForRequestedType<IProvider>().TheDefaultIsConcreteType<Provider>());
+ var instance = _container.TryGetInstance(typeof(IProvider));
+ instance.ShouldBeOfType(typeof(Provider));
+ }
+
+ [Test]
+ public void TryGetInstanceViaGeneric_ReturnsNull_WhenTypeNotFound()
+ {
+ var instance = _container.TryGetInstance<IProvider>();
+ instance.ShouldBeNull();
+ }
+
+ [Test]
+ public void TryGetInstanceViaGeneric_ReturnsInstance_WhenTypeFound()
+ {
+ _container.Configure(c => c.ForRequestedType<IProvider>().TheDefaultIsConcreteType<Provider>());
+ var instance = _container.TryGetInstance<IProvider>();
+ instance.ShouldBeOfType(typeof(Provider));
+ }
+
+ [Test]
+ public void TryGetInstanceViaNameAndGeneric_ReturnsNull_WhenTypeNotFound()
+ {
+ addColorInstance("Red");
+ addColorInstance("Orange");
+ addColorInstance("Blue");
+
+ var instance = _container.TryGetInstance<Rule>("Yellow");
+ instance.ShouldBeNull();
+ }
+
+ [Test]
+ public void TryGetInstanceViaNameAndGeneric_ReturnsInstance_WhenTypeFound()
+ {
+ addColorInstance("Red");
+ addColorInstance("Orange");
+ addColorInstance("Blue");
+
+ var instance = _container.TryGetInstance<Rule>("Orange");
+ instance.ShouldBeOfType(typeof(ColorRule));
+ }
+
+
+
[Test, ExpectedException(typeof (StructureMapException))]
public void GetMissingType()
{
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|