gpt4 book ai didi

c# - 如何在 caSTLe-windsor 的 xml 配置中配置泛型类型参数?

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:31 24 4
gpt4 key购买 nike

我有以下代码:

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>

重要提示:

  1. 我们应该为后续的复杂属性使用,否则它无法“看到”所有参数列表。它只有第一个 child :ConfigurationParametersInspector.cs, line 58
  2. 我们应该显式地设置接口(interface)类型属性所代表的参数类型。我们可以预期 type 属性应该用于 &ltTest> 节点,但实际上,只有子 XML 节点传递给为属性选择类型的方法。

无论如何,配置已使用 3.2.0 进行检查并且可以正常工作。

关于c# - 如何在 caSTLe-windsor 的 xml 配置中配置泛型类型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21258649/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com