Windsor Typed Factory, передавая аргументы при использовании синглтона - PullRequest
0 голосов
/ 27 апреля 2011

Я использую Замок Виндзор .

У меня есть два типа компонентов, где реализация может быть выбрана во время выполнения на графическом интерфейсе. Чтобы справиться с этим, я разрешаю их по имени. Для обработки их разрешения по имени я использую Typed Factory Facility .

Один из типов компонентов зависит от другого. Чтобы обработать зависимость, я передаю аргумент в качестве аргумента параметра метода / конструктора фабрики.

Вот отредактированная и сокращенная версия этого фабричного интерфейса:

public interface IModelFactory
{
    IMyDomainCommandFactory GetFooCommandFactory();
    IMyDomainCommandFactory GetBarCommandFactory();
    IMyDomainStrategy GetCreateSpecificSizeStrategy(int size, IMyDomainCommandFactory commandFactory);
    IMyDomainStrategy GetCreateUntilFailureStrategy(IMyDomainCommandFactory commandFactory);
}

Обратите внимание, что я использую свои собственные реализации для IMyDomainCommandFactory, а не средство Typed Factory. У этих заводов преднамеренно сложное поведение, и предприятие не соответствует их потребностям.

Проблема, которую я замечаю, состоит в том, что, если я регистрирую компоненты своей стратегии с одноэлементным образом жизни, я всегда возвращаюсь к одному и тому же экземпляру, даже если я передаю разные аргументы получателю.

По-моему, это идет вразрез с Принципом Наименьшего Удивления , но, возможно, другие люди придерживаются другого мнения :) Стоит ли это считать ошибкой?

Если нет, есть ли чистый способ заставить контейнер или фабрику создать только один экземпляр для каждой комбинации аргументов?

1 Ответ

1 голос
/ 27 апреля 2011

В зависимости от того, как вы на это смотрите, но, конечно, экземпляр для каждой комбинации параметров нельзя назвать одноэлементным, поэтому я говорю, что это пошло бы против PoLA, если бы Windsor реализовал поведение, которое вы ожидаете.

ЕслиВы хотите этого, вам нужен индивидуальный, не синглтонский образ жизни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...