使用LightInject解析静态函数中的实例

时间:2014-11-15 16:35:33

标签: c# asp.net-mvc light-inject

我在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设为静态,还是一种不好的做法?

1 个答案:

答案 0 :(得分:2)

您可以使容器成为单例(静态),因为在大多数情况下,每个应用程序域只有一个容器实例。话虽如此,我不建议从扩展方法中访问容器。你在这里基本上做的是服务定位器模式,它被认为是反模式。尝试以只在组合根(应用程序启动)中引用容器的方式组织代码。因此,在这种情况下,您应该考虑在没有容器的情况下创建扩展方法,或者您可以将HtmlHelper注入任何需要它的类中。

关于Bernhard Richter(LightInject的作者)