IoC - 延迟控制器中服务的初始化,直到需要

时间:2013-09-06 13:32:04

标签: asp.net-mvc autofac

在ASP.NET MVC应用程序中,我从控制器调用“服务”方法。

通常,名为ReportingController的控制器会调用ReportingServices中的方法。正在使用Autofac Mvc.Integration实例化服务类。

builder.RegisterControllers(Assembly.GetExecutingAssembly());

然后将服务注入控制器构造函数。

public ReportingController(ReportingServices service)

到目前为止一切顺利。 但偶尔,控制器需要从其他服务调用方法。我更改了autofac配置:

builder.RegisterControllers(Assembly.GetExecutingAssembly())
       .PropertiesAutowired(PropertyWiringOptions.PreserveSetValues);

并向控制器添加了属性:

public CommonServices CommonService { get; set; } // new properties
public ReportingController(ReportingServices service) {} // existing ctor

现在发生的事情是,当控制器被实例化时,所有属性也被设置,即使它们从未被特定的ActionMethod使用。

如何告诉Autofac在需要之前延迟实例化属性,或者我可能根本不关心这种不必要的初始化?

1 个答案:

答案 0 :(得分:0)

Autofac支持Lazy<T> out of the box

所以你只需要将你的财产声明为:

public Lazy<CommonServices> CommonService { get; set; } 

在您使用CommonServices访问Lazy的值之前,Autofac不会实例化您的CommonService.Value