У меня есть следующий сценарий:
В базовом контейнере я регистрирую тип.
container.RegisterType<IFoo,Foo>();
В дочернем контейнере я хотел бы зарегистрировать Decorator, который переносит любыеБазовый контейнер использует.Поэтому, если у меня есть этот класс:
public class FooDecorator: IFoo
{
public FooDecorator(IFoo foo) {}
}
Я хочу зарегистрироваться:
childContainer.RegisterType<IFoo,FooDecorator>();
Мне кажется разумным, что когда дочерний контейнер разрешает IFoo в конструкторе FooDecorator, он будетпопытаться разрешить IFoo родительского контейнера.Но это не так.Он пытается разрешить FooDecorator снова и, следовательно, снова и снова, пока не будет сгенерировано исключение StackOverflow.
Я знаю, что это можно решить, указав InjectionConstructor в регистрации дочернего контейнера, например:
childContainer.RegisterType<IFoo,FooDecorator>(
new InjectionConstructor(new ResolvedParameter<Foo>()));
Но это кажется хрупким.Если кто-то хочет изменить фактический экземпляр IFoo в базовом контейнере с Foo на что-то другое, ему также придется изменить также все дочерние контейнеры.
Так что, я что-то упустил?Есть ли лучшее решение проблемы?