gpt4 book ai didi

c# - 如何使用 CaSTLe Windsor 和 MS Test 将依赖项传递给对象?

转载 作者:行者123 更新时间:2023-11-30 18:08:45 27 4
gpt4 key购买 nike

我正在尝试将 CaSTLe Windsor 与 MS Test 结合使用。测试类似乎只使用默认构造函数。如何配置 CaSTLe 以在构造函数中解析服务?

这是测试类的构造函数:

private readonly IWebBrowser _browser;

public DepressionSummaryTests()
{

}

public DepressionSummaryTests(IWebBrowser browser)
{
_browser = browser;
}

我在应用程序配置中的组件如下所示:

 <castle>
<components>
<component id="browser"
service="ConversationSummary.IWebBrowser, ConversationSummary"
type="ConversationSummary.Browser" />

</components>
</castle>

这是我的应用程序容器:

public class ApplicationContainer : WindsorContainer
{
private static IWindsorContainer container;

static ApplicationContainer()
{
container = new WindsorContainer(new XmlInterpreter(new ConfigResource("castle")));
}
private static IWindsorContainer Container
{
get { return container; }
}

public static IWebBrowser Browser
{
get { return (IWebBrowser) Container.Resolve("browser"); }
}
}

MS 测试需要默认构造函数。我错过了什么?

谢谢!

最佳答案

由于 MSTest 需要默认构造函数,这也意味着它仅使用此构造函数。因此,您永远无法让它使用重载的构造函数。这不是 CaSTLe Windsor 的问题,而是 MSTest 的工作方式。

但这没什么大不了的,因为你 shouldn't need to use a container for unit testing无论如何。

当您使用 Windsor 时,您可能需要考虑使用 Fluent Registration API instead of XML .

另一件事是您不应该使用静态服务定位器 - it's an anti-pattern .这意味着 ApplicationContainer 类是多余的,应该删除。

关于c# - 如何使用 CaSTLe Windsor 和 MS Test 将依赖项传递给对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3011449/

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