Spring4d 事件驱动架构或如何检索给定接口的所有实例

Spring4d Event Driven Architecture or How to retrieve all instances of a given interface

我检查了 Spring4d 库中有关事件驱动架构的示例。

据我了解,当发布事件时,ServiceLocator 将实例化所有实现 IEventHandler<TEventClass> 接口的 classes 并要求这些处理程序处理事件。

但是,是否有推荐的方法只要求已经实例化的服务来处理事件。

假设我实例化了任意数量的 Controllers。其中一些可能是多次实例化的相同class。其中一些可能是独一无二的。

我想让这些实例化的 Controllers 监听一个 TUserAdded 事件。这些 Controllers 实现了 IEventHandler<TUserAdded> 接口。我不希望非实例化 Controllers 监听事件。

在某种程度上,我想获得实现 IEventHandler<TUserAdded> 事件的所有实例的列表。

此外,在理想情况下,如果 Controller 注册为 Singleton

container.RegisterType<TMySingletonController>.AsSingleton;

我想实例化 TMySingletonController 如果它还没有被实例化,那么,让它处理事件。

Spring4d 中是否有内置方法来获取给定接口的所有实例的列表?

Spring4D 的 DI 容器是所谓的非跟踪容器,这意味着它不会跟踪它创建的实例的生命周期(当然除了单例实例)。

如果您想解析接口 X 的所有注册服务,那么您可以解析 TArray<X>IEnumerable<X>,但如果它们未注册为单例,它将创建新实例。

您查看的示例取自一篇关于结合 DI 和事件驱动架构的博客文章,但您的问题听起来更像是您需要使用观察者和工厂模式。请不要滥用 DI 容器作为实例存储库。