Можно лениво разрешить компонент в Castle Windsor, зарегистрировав LazyOfTComponentLoader в контейнере и разрешив Lazy<T>
, как указано здесь:
container.Register(
Component.For<ILazyComponentLoader>().ImplementedBy<LazyOfTComponentLoader>(),
Component.For<ISomeService>().ImplementedBy<ServiceImpl>().LifestyleTransient()
);
var lazy = container.Resolve<Lazy<ISomeService>>();
lazy.Value.DoSomething();
Однако можно ли зарегистрировать компонент в контейнере, чтобы он всегда разрешался как Lazy<T>
без необходимости указывать Lazy в вызове разрешения?
В частности, мне интересно, как внедрять ленивые компоненты в контроллеры в проекте MVC при использовании внедрения конструктора.
РЕДАКТИРОВАТЬ: вы можете указать Lazy<ISomeService> someService
в качестве параметра в конструкторе контроллера, как можно увидеть здесь. Однако есть ли способ гарантировать, что компонент будет отложен в процессе регистрации?