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

本文关键字:实例 静态函数 LightInject 使用 | 更新日期: 2023-09-27 18:30:28

我在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);
}

我可以将MvcApplication类中的ServiceContainer设为静态还是这是一种不好的做法?

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

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

问候Bernhard Richter(LightInject的作者)