From: <fli...@us...> - 2009-12-21 23:11:33
|
Revision: 282 http://structuremap.svn.sourceforge.net/structuremap/?rev=282&view=rev Author: flimflan Date: 2009-12-21 23:11:23 +0000 (Mon, 21 Dec 2009) Log Message: ----------- Allow specifying a child array by type for a configured instance without using generics. Modified Paths: -------------- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-19 04:03:09 UTC (rev 281) +++ trunk/Source/StructureMap/Pipeline/ConfiguredInstance.Expressions.cs 2009-12-21 23:11:23 UTC (rev 282) @@ -96,6 +96,14 @@ return new ChildArrayExpression(this, propertyName); } + public ChildArrayExpression ChildArray(Type pluginType) + { + //TODO: add validation check + validateTypeIsArray(pluginType); + var propertyName = findPropertyName(pluginType); + return ChildArray(propertyName); + } + /// <summary> /// Inline definition of a dependency array like IService[] or IHandler[] /// </summary> @@ -103,10 +111,7 @@ /// <returns></returns> public ChildArrayExpression ChildArray<PLUGINTYPE>() { - validateTypeIsArray<PLUGINTYPE>(); - - string propertyName = findPropertyName<PLUGINTYPE>(); - return ChildArray<PLUGINTYPE>(propertyName); + return ChildArray(typeof (PLUGINTYPE)); } /// <summary> Modified: trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs =================================================================== --- trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-19 04:03:09 UTC (rev 281) +++ trunk/Source/StructureMap/Pipeline/ConfiguredInstanceBase.cs 2009-12-21 23:11:23 UTC (rev 282) @@ -255,7 +255,12 @@ protected static void validateTypeIsArray<PLUGINTYPE>() { - if (!typeof (PLUGINTYPE).IsArray) + validateTypeIsArray(typeof(PLUGINTYPE)); + } + + protected static void validateTypeIsArray(Type pluginType) + { + if (!pluginType.IsArray) { throw new StructureMapException(307); } Modified: trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs =================================================================== --- trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2009-12-19 04:03:09 UTC (rev 281) +++ trunk/Source/StructureMap.Testing/Pipeline/ConfiguredInstanceTester.cs 2009-12-21 23:11:23 UTC (rev 282) @@ -198,6 +198,40 @@ } [Test] + public void HasProperty_for_generic_child_array_when_property_name_is_inferred() + { + var instance = new ConfiguredInstance(typeof(UsesGateways)); + + IConfiguredInstance configuredInstance = instance; + configuredInstance.HasProperty("gateways").ShouldBeFalse(); + + instance.ChildArray<IGateway[]>().Contains(new DefaultInstance()); + configuredInstance.HasProperty("gateways").ShouldBeTrue(); + } + + [Test] + public void HasProperty_for_child_array_when_property_name_is_inferred() + { + var instance = new ConfiguredInstance(typeof(UsesGateways)); + + IConfiguredInstance configuredInstance = instance; + configuredInstance.HasProperty("gateways").ShouldBeFalse(); + + instance.ChildArray(typeof(IGateway[])).Contains(new DefaultInstance()); + configuredInstance.HasProperty("gateways").ShouldBeTrue(); + } + + public class UsesGateways + { + private readonly IGateway[] _gateways; + + public UsesGateways(IGateway[] gateways) + { + _gateways = gateways; + } + } + + [Test] public void Property_cannot_be_found_so_throw_205() { try This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |