因此,我正在使用基于.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初始化的服务,但由于这个帮助器是一个静态方法,所以你没有选择构造函数注入。
答案 0 :(得分:2)
我同意你可能有设计缺陷的评论。
话虽如此,如果你有这样做,有几种方法可以解决它:
1)使用服务定位器:从方法中解析所需的接口实现。有些人认为这是一种反模式,它有点代码味道。
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();
}
}
然后从你的作文根(现在是受欢迎的术语)你通过调用assign方法设置服务:
...
MyHelper.Assign(container.Resolve<IMyService>());
...
可能感觉不到100%舒适,但会产生预期效果。