【发布时间】:2017-03-06 10:49:04
【问题描述】:
考虑这样一种情况,您有一些控制器使用某些 IOC 容器注入的服务,例如 autofac 或 ninject。每次请求到达该控制器时都会初始化服务,即使它只是想触发仅调用视图的简单操作。这里的问题是如何将服务的初始化推迟到真正需要的时候,这样我就可以节省一些资源。我应该在这里使用Lazy吗?或者也许我应该将此服务注入方法而不是控制器?
例子:
public class SomeController : Controller
{
private readonly ISomeService _service;
public SomeController(ISomeService service)
{
this._service = service;
}
// action that completely doesn't need to initialize service
public ActionResult Index()
{
return View();
}
// this action needs to initialize
public ActionResult Save()
{
this._service.DoSomething();
return View();
}
}
【问题讨论】:
-
你可以实现属性注入,所以它会在第一次调用getter(到服务)时被注入。
-
您是否进行了性能测试以查看差异是什么以及这对您的应用程序是否真正重要?
-
为什么引用
Lazy<T>比引用T更快?
标签: c# .net asp.net-mvc dependency-injection