3

在 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 延迟属性的实例化,直到需要,或者我可能根本不关心这种不必要的初始化?

4

1 回答 1

0

Autofac 支持Lazy<T> 开箱即用

因此,您只需要将您的财产声明为:

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

并且 Autofac 不会实例化您的CommonServices,直到您不使用CommonService.Value.

于 2013-09-06T13:41:23.547 回答