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