Spring4d Event Driven Architecture или Как получить все экземпляры данного интерфейса

Я проверил образец в библиотеке Spring4d на архитектуре, управляемой событиями.

Из того, что я могу понять, когда событие публикуется, ServiceLocator будет создавать экземпляры всех классов, которые реализуют IEventHandler<TEventClass> интерфейс и попросить эти обработчики обработать событие.

Тем не менее, есть ли рекомендуемый подход, чтобы только запросить уже созданные службы для обработки события.

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

Я хочу, чтобы эти экземпляры Controllers слушать TUserAdded событие. Эти Controllers реализовать IEventHandler<TUserAdded> интерфейс. Я не хочу необъявленных Controllers слушать событие.

В некотором смысле, я хотел бы получить список всех экземпляров, которые реализуют IEventHandler<TUserAdded> событие.

Кроме того, в идеальном случае, если Controller зарегистрирован как Singleton

container.RegisterType<TMySingletonController>.AsSingleton;

Я хотел бы создать экземпляр TMySingletonController если он еще не создан, пусть он обрабатывает событие.

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

1 ответ

Решение

Контейнер DI в Spring4D - это так называемый не отслеживающий контейнер, который означает, что он не отслеживает время жизни созданных им экземпляров (за исключением одноэлементных, разумеется).

Если вы хотите разрешить все зарегистрированные сервисы для интерфейса X тогда вы можете решить TArray<X> или же IEnumerable<X> но это создаст новые экземпляры, если они не зарегистрированы как singleton.

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

Другие вопросы по тегам