Castle Windsor - Как создать установщик для работы с многоуровневыми структурами зависимостей - PullRequest
0 голосов
/ 04 июня 2018

У меня есть случай, когда несколько разных классов наследуются от одного и того же интерфейса.Кроме того, иногда класс, который наследуется от интерфейса, также воспринимает его как зависимость.

Мое решение выглядит следующим образом:

InterfaceAssembly
    -IGetData<T>

DataAssembly
    -Repository.CustomerRepository : IGetData<Customer>
    -Repository.ProductRepository : IGetData<Product>
    -Cache.CustomerCache : IGetData<Customer>
    -Cache.ProductCache : IGetData<Product>

Я хотел бы создать установщик, который будет отдавать приоритет пространству имен Cache над пространством имен Repository.Однако в случае CustomerCache он как реализует, так и имеет зависимость от IGetData<Customer>.CustomerCache следует ввести CustomerRepository для удовлетворения этой зависимости.

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

1 Ответ

0 голосов
/ 05 июня 2018

Кажется, это образец декоратора.Замок распознает декораторов при регистрации в правильном порядке.Например, при регистрации, например:

container.Register(Component.For<IGetData<Customer>>().ImplementedBy<CustomerCache>());
container.Register(Component.For<IGetData<Customer>>().ImplementedBy<CustomerRepository>());

Тогда разрешение IGetData<Customer> вернет CustomerCache, что украшает CustomerRepository.

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