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; } 

CommonServicesまた、 で Lazy の値にアクセスしない限り、Autofac はインスタンスを作成しませんCommonService.Value

于 2013-09-06T13:41:23.547 に答える