【发布时间】:2013-09-06 21:41:23
【问题描述】:
在 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 将属性的实例化延迟到需要时,或者我可能根本不应该关心这种不必要的初始化?
【问题讨论】:
-
你的控制器可能有太多的责任。
-
使用
Lazy<T>:stackoverflow.com/questions/3075260/… -
@ta.speot.is:你的意思是在控制器和服务之间建立一对一的关系是一种很好的做法吗?如果控制器突然需要来自另一个服务的某些东西,这可能应该在服务本身而不是控制器中处理?
标签: asp.net-mvc autofac