我有以下代码:
public class TestClass
{
public string Foo { get; set; }
public ITest<string> Test { get; set; }
}
[Convertible]
public interface ITest<T>
{
T Param { get; set; }
}
[Convertible]
public class Test<T> : ITest<T>
{
public T Param { get; set; }
public string OtherParam { get; set; }
}
我想用它
WindsorContainer container = new WindsorContainer(new XmlInterpreter());
var t = container.Resolve<TestClass>();
我不想使用 Fluent 配置,而是使用 xml 配置。此外,我想避免为 ITest 显式注册组件。好像可以只配置一个组件注册(TestClass),所有参数都可以在
节点中提供。但目前我未能创建工作配置,它创建了
null TestClass 对象或 TestClass 并将 Test 属性设置为
null。
我的配置:
<component id="Service.Main"
type="ConsoleApplication1.TestClass"
lifestyle="transient">
<parameters>
<foo>foo string</foo>
<Test>
<Param>param string</Param>
<OtherParam>sdgsdfgdf</OtherParam>
</Test>
</parameters>
</component>
也许有人可以建议正确的配置?谢谢
因此,我获得了 3.2.0 版本的源代码。添加简单的控制台应用程序并通过调试检查不同版本。
这是可行的解决方案:
<component id="Service.Main"
type="ConsoleApplication1.TestClass"
lifestyle="transient">
<parameters>
<foo>foo string</foo>
<Test>
<parameters type="ConsoleApplication1.Test`1[[System.String, mscorlib]], ConsoleApplication1">
<Param>param string</Param>
<OtherParam>sdgsdfgdf</OtherParam>
</parameters>
</Test>
</parameters>
</component>
重要提示:
- 我们应该为后续的复杂属性使用,否则它无法“看到”所有参数列表。它只有第一个 child :ConfigurationParametersInspector.cs, line 58
- 我们应该显式地设置接口(interface)类型属性所代表的参数类型。我们可以预期 type 属性应该用于 <Test> 节点,但实际上,只有子 XML 节点传递给为属性选择类型的方法。
无论如何,配置已使用 3.2.0 进行检查并且可以正常工作。
我是一名优秀的程序员,十分优秀!