2016-03-30 3 views
2

Простой и простой, какой прецедент Orchard.Environment.Work<> класс, определенный в Orchard\Environment\WorkContextModule.cs?Что такое класс Work <> для Orchard CMS?

Он может быть найден в нескольких местах, как

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 получает разрешаться разрешителе Dependency, который дает вам работу ленивой загрузки внедрение зависимости.

+0

Спасибо, именно то, что я принимал. – ViRuSTriNiTy

+3

Это немного более ленивая загрузка. Ленивая загрузка может быть достигнута путем простого ввода «Lazy ». 'Work ' аналогичен, но также гарантирует, что объект будет удален из текущей рабочей области, независимо от того, в какой области запроса находится запрос. –

+5

Существует также другая разница - каждый вызов свойства «Работа .» при разрешении объекта из контейнера Autofac, тогда как вызов Lazy .Value' несколько раз сделает это не более одного раза. –

Смежные вопросы