所以,我正在开发基于 .NET MVC 3 的应用程序,并使用 CaSTLe Windsor 作为 IOC 容器。
我使用它没有任何问题并且工作得很好。现在我遇到了这种情况,我创建了一个公开方法的 HTML 帮助器
public static string GetContentByKey(string key)
{
//I need to use a service that is resolved by Windsor here
}
问题是,在这个 Helper 类中,我需要使用通过 Windsor 初始化的服务,但由于这个 helper 是静态方法,因此您无法选择构造函数注入(inject)。
最佳答案
我同意您可能存在设计缺陷的评论。
话虽这么说,如果您必须这样做,有几种方法可以实现:
1) 使用服务定位器:从方法内解析所需的接口(interface)实现。有些人认为这是一种反模式,而且有点代码味道。
2) 使用可初始化的类级静态字段(可能从空对象实现开始):
public static class MyHelper
{
private static IMyService service = new NullMyService();
public static void Assign(IMyService instance)
{
service = instance;
}
public static string DoSomething(this HtmlHelper html)
{
return service.Whatever();
}
}
然后从您的组合根(这是当今流行的术语)通过调用分配方法来设置服务:
...
MyHelper.Assign(container.Resolve<IMyService>());
...
可能不会感觉 100% 舒服,但会产生预期的结果。
关于.net - 在 HTML Helpers 中使用 CaSTLe Windsor 进行依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10720023/