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