В этом примере не используется передовая практика использования IServiceLocator для обертывания моего контейнера, но он меня немного сбивает с толку.
Я думал, что WindsorContainer может автоматически разрешить себя как IWindsorContainer?
var container = new WindsorContainer();
container.Register(Component.For<INeedWindsorContainer>()
.ImplementedBy<GiveMeWindsorContainer>()
.LifeStyle.Singleton);
Реализация INeedWindsorContainer:
public class GiveMeWindsorContainer : INeedWindsorContainer
{
IWindsorContainer _container;
public GiveMeWindsorContainer(IWindsorContainer container)
{
_container = container;
}
}
Однако это может не сработать, потому что WindsorContainer не знает, как разрешить IWindsorContainer!
Конечно, немедленное решение, которое я нашел, было:
var container = new WindsorContainer();
container.Register(
Component.For<IWindsorContainer>()
.Instance(container)
.LifeStyle.Singleton,
Component.For<INeedWindsorContainer>()
.ImplementedBy<GiveMeWindsorContainer>()
.LifeStyle.Singleton);
Однако мне это кажется немного странным, я что-то не так делаю?