2016-03-30 2 views
2

Orchard.Environment.Work<>クラスのユースケースは、Orchard\Environment\WorkContextModule.csで定義されていますか?オーチャードCMSのWork <>クラスとは何ですか?

それは

private readonly Work<IContainerService> _containerService; 

public Shapes(Work<IContainerService> containerService) { 
    _containerService = containerService; 
... 

のようないくつかの場所で見つけることができますがIContainerServiceの遅延解決のためにそれはありますか?

答えて

6

Workはレイジーローディング依存性注入用です。クラスをインスタンス化するとき、依存関係が解決されていませんが、Valueプロパティを呼び出すときにのみ:

private readonly IMyService _myService; 
private readonly IMyOtherService _myOtherService; 
public MyClass(Work<IMyService> myService, IMyOtherService myOtherService) { 
    // Just assign the Work class to the backing property 
    // The dependency won't be resolved until '_myService.Value' is called 
    _myService = myService; 
    // The IMyOtherService is resolved and assigned to the _myOtherService property 
    _myOtherService = myOtherService; 
} 

を今すぐ_myService.Valueが呼び出されたときにのみ、IMyServiceはあなたに遅延ロードの作業を与える依存リゾルバによって解決さ依存性注入。

+0

ありがとう、私が推測していたものです。 – ViRuSTriNiTy

+3

これは怠惰な読み込みよりも少しです。レイジーローディングは 'Lazy 'を単に注入することで実現できます。 'Work 'は似ていますが、リクエスタがどのスコープに属していても、オブジェクトが現在の作業スコープから解決されることを保証します。 –

+5

もう1つの違いがあります。 'Work .Value' Autofacコンテナからオブジェクトを解決する際には、 'Lazy .Value'を複数回呼び出すと、最大で1回しか行いません。 –

関連する問題