3

Можно лениво разрешить компонент в замок Виндзор путем регистрации LazyOfTComponentLoader в контейнере и решение Lazy<T> как указано here:Автоматически лениво разрешающие компоненты в замок Виндзор

container.Register(
    Component.For<ILazyComponentLoader>().ImplementedBy<LazyOfTComponentLoader>(), 
    Component.For<ISomeService>().ImplementedBy<ServiceImpl>().LifestyleTransient() 
    ); 

var lazy = container.Resolve<Lazy<ISomeService>>(); 

lazy.Value.DoSomething(); 

Тем не менее, можно ли регистр компонент в контейнере, так что он равен всегда разрешен как Lazy<T> без необходимости указания «Ленивый» в разрешении?

В частности, мне интересно, как вводить ленивые компоненты в контроллеры в проекте MVC при использовании инъекции конструктора.

EDIT: Вы можете указать Lazy<ISomeService> someService в качестве параметра в конструкторе контроллера, как можно видеть here. Однако существует ли способ гарантировать, что компонент решается лениво через процесс регистрации?

ответ

3

Если вы хотите разрешить ленивый загруженный экземпляр компонента, вам нужно будет сделать Resolve<Lazy<ISomeService>>(). Функция lazy.Value, будет выполнять фактическое разрешение компонента. Если вы решите проблему, вы сразу получите свой компонент.

Если вы действительно хотите иметь компонент, который разрешен только при первом использовании без использования Lazy, вы можете прибегнуть к написанию перехватчика.

Удачи, Marwijn.

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

  • Нет связанных вопросов^_^