3

我在 ASP MVC 项目中使用 LightInject。初始化代码和上面的差不多: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);
}

我可以ServiceContainerMvcApplication课堂上的内容设为静态还是不好的做法?

4

1 回答 1

3

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

问候 Bernhard Richter(LightInject 的作者)

于 2014-11-16T10:23:21.807 回答