StructureMap настроить профилированный вложенный контейнер - PullRequest
1 голос
/ 17 января 2011

Я столкнулся с неожиданным результатом при попытке разрешить экземпляр. Это, вероятно, лучше объяснить в коде. Вот реестр, используемый для ObjectFactory.Initialize:

public MyRegistry : Registry {
    public MyRegistry() {
        this.For<IServiceA>.Use<ServiceA>();
        this.For<IServiceA>.Use<SpecialServiceA>().Named("Special");
        this.Profile("Special", p => p.For<IServiceA>().Use("Special"));

        this.For<IScreen>().Use<NullScreen>();
    }
}

В фабричном классе я создаю вложенный контейнер и регистрирую текущий экран в контейнере следующим образом:

public void ProcessScreenRequest(IScreen screen) {
    using(IContainer nestedContainer = this._container.GetNestedContainer(screen.Profile)) {
        nestedContainer.Configure(x => x.For<IScreen>().Use(screen);
        //process chain of commands to display screen.
    }
}

В одной из моих команд он имеет зависимость для IScreen, но вместо получения экземпляра "screen", который я настроил для вложенного контейнера, он получает NullScreen.

Что-то я делаю не так или профилированные вложенные контейнеры не поддерживают это scenerio?

1 Ответ

1 голос
/ 20 января 2011

Я иду с решением вызова nestedContainer.EjectAllInstancesOf (). Я до сих пор не знаю, почему указание профиля для контейнера приведет к изменению экземпляра по умолчанию IScreen.

...