Почему мой WindsorContainer не может разрешить IWindsorContainer? - PullRequest
2 голосов
/ 01 июля 2011

В этом примере не используется передовая практика использования 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);

Однако мне это кажется немного странным, я что-то не так делаю?

1 Ответ

7 голосов
/ 01 июля 2011

Windsor может автоматически разрешать IKernel (ядро контейнера, в котором есть большинство функций, которые вам нужны).

Как вы сказали сами, как правило, не рекомендуется пропускать сам контейнер.В большинстве случаев вам следует использовать фабрику, возможно, через типизированный завод.

...