2016-03-30 36 views
2

Düz ve basit, Orchard\Environment\WorkContextModule.cs içinde tanımlanan Orchard.Environment.Work<> sınıfının kullanım durumu nedir?Orchard CMS için Work <> sınıfı nedir?

O

private readonly Work<IContainerService> _containerService; 

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

gibi çeşitli yerlerde bulunabilir IContainerService gecikmeli çözme yönünde mi?

cevap

6

Work sınıfı, tembel yükleme bağımlılığı enjeksiyonu içindir. sınıf başlatmasını bağımlılık çözülmezse, ancak Value özelliği arama yalnızca: Artık

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

çağrıldığında _myService.Value sadece IMyService size Gecikmeli yüklemenin çalışma verir Bağımlılık Çözümleyici tarafından çözüme kavuşturulacağını bağımlılık enjeksiyonu.

+0

Teşekkür ederim, tam olarak neyi varsayıyordum. – ViRuSTriNiTy

+3

Tembel yükleme biraz daha fazla. Tembel yükleme, sadece Lazy 'ile enjekte edilebilir. 'İş ' benzerdir, ancak aynı zamanda, istekte bulunanın kapsamı ne olursa olsun, nesnenin geçerli çalışma kapsamından çözülmesini de sağlar. –

+5

Başka bir fark da vardır - her bir işe 'Çalışıyor .Value' özelliği sonuçlanır Bir nesneyi Autofac kapsayıcısından çözerken, "Lazy .Value" kelimesini birden çok kez çağırmak en fazla bir kez yapar. –

İlgili konular