2016-03-30 8 views
2

Einfach und einfach, was ist der Anwendungsfall der Orchard.Environment.Work<> Klasse definiert in Orchard\Environment\WorkContextModule.cs?Was ist die Klasse Work <> in Orchard CMS?

Es kann in verschiedenen Orten wie

private readonly Work<IContainerService> _containerService; 

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

Ist es für eine verzögerte Auflösung von IContainerService gefunden werden?

Antwort

6

Die Klasse Work ist für die verzögerte Ladeabhängigkeitsinjektion vorgesehen. Die Abhängigkeit wird nicht aufgelöst, wenn die Klasse instanziiert wird, aber nur, wenn die Value Eigenschaft Aufruf:

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

Jetzt erst, wenn _myService.Value genannt wird, wird die IMyService vom Resolver Abhängigkeit aufgelöst, mit dem Sie die Bearbeitung eines verzögertes Laden gibt Abhängigkeitsspritze.

+0

Danke, genau das, was ich annahm. – ViRuSTriNiTy

+3

Es ist ein bisschen mehr als faulen Laden. Lazy Loading kann erreicht werden, indem einfach 'Lazy 'injiziert wird. 'Arbeit ' ist ähnlich, aber es stellt auch sicher, dass das Objekt aus dem aktuellen Arbeitsbereich gelöst wird, unabhängig vom Umfang des Anforderers. –

+5

Es gibt auch einen weiteren Unterschied - jeder Aufruf von 'Work .Value'-Eigenschaft wird resultieren beim Auflösen eines Objekts aus dem Autofac-Container, während der Aufruf von 'Lazy .Value' mehrmals wiederholt wird. –

Verwandte Themen