0

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

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

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

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

我希望这些实例化Controllers来监听TUserAdded事件。这些Controllers实现了IEventHandler<TUserAdded>接口。我不希望未实例化Controllers的人收听该事件。

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

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

container.RegisterType<TMySingletonController>.AsSingleton;

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

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

4

1 回答 1

1

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

如果要解析接口的所有注册服务,X则可以解析TArray<X>,或者IEnumerable<X>如果它们未注册为单例,它将创建新实例。

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

于 2015-12-01T00:09:40.953 回答