在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在需要之前延迟实例化属性,或者我可能根本不关心这种不必要的初始化?
答案 0 :(得分:0)
Autofac支持Lazy<T>
out of the box。
所以你只需要将你的财产声明为:
public Lazy<CommonServices> CommonService { get; set; }
在您使用CommonServices
访问Lazy的值之前,Autofac不会实例化您的CommonService.Value
。