我在ASP MVC项目中使用LightInject。初始化代码与on http://www.lightinject.net/#mvc
大致相同我的问题是如何解析静态函数中的实例,例如HTML帮助器:
public static string MyHtmlExtension(this HtmlHelper h)
{
var myService = new MyService(); // <- get this from container instead of creating new object
return myService.DoSomething(h);
}
我可以将ServiceContainer
类中的MvcApplication
设为静态,还是一种不好的做法?
答案 0 :(得分:2)
您可以使容器成为单例(静态),因为在大多数情况下,每个应用程序域只有一个容器实例。话虽如此,我不建议从扩展方法中访问容器。你在这里基本上做的是服务定位器模式,它被认为是反模式。尝试以只在组合根(应用程序启动)中引用容器的方式组织代码。因此,在这种情况下,您应该考虑在没有容器的情况下创建扩展方法,或者您可以将HtmlHelper注入任何需要它的类中。
关于Bernhard Richter(LightInject的作者)