Я использую Замок Виндзор .
У меня есть два типа компонентов, где реализация может быть выбрана во время выполнения на графическом интерфейсе. Чтобы справиться с этим, я разрешаю их по имени. Для обработки их разрешения по имени я использую Typed Factory Facility .
Один из типов компонентов зависит от другого. Чтобы обработать зависимость, я передаю аргумент в качестве аргумента параметра метода / конструктора фабрики.
Вот отредактированная и сокращенная версия этого фабричного интерфейса:
public interface IModelFactory
{
IMyDomainCommandFactory GetFooCommandFactory();
IMyDomainCommandFactory GetBarCommandFactory();
IMyDomainStrategy GetCreateSpecificSizeStrategy(int size, IMyDomainCommandFactory commandFactory);
IMyDomainStrategy GetCreateUntilFailureStrategy(IMyDomainCommandFactory commandFactory);
}
Обратите внимание, что я использую свои собственные реализации для IMyDomainCommandFactory
, а не средство Typed Factory. У этих заводов преднамеренно сложное поведение, и предприятие не соответствует их потребностям.
Проблема, которую я замечаю, состоит в том, что, если я регистрирую компоненты своей стратегии с одноэлементным образом жизни, я всегда возвращаюсь к одному и тому же экземпляру, даже если я передаю разные аргументы получателю.
По-моему, это идет вразрез с Принципом Наименьшего Удивления , но, возможно, другие люди придерживаются другого мнения :) Стоит ли это считать ошибкой?
Если нет, есть ли чистый способ заставить контейнер или фабрику создать только один экземпляр для каждой комбинации аргументов?