构造函数注入&;工厂:两种生活时期所需的物品

本文关键字:生活 两种 注入 amp 工厂 构造函数 | 更新日期: 2023-09-27 18:25:06

我有一个对象C,这是两种类型的类所需要的。其中一个类在单独的线程中运行,另一个类则在计时器运行事件的帮助下创建多个线程。

所以物体C基本上有两个生命周期。

对象C与A和B一起由工厂创建。对于类1,我通过主工厂创建实例,但对于第二个实例,我必须通过整个工厂。第二类现在将在运行时(基于计时器刻度)决定如何创建对象C.

我的问题是关于第二种情况:我正在通过整个工厂,除了创建对象C的知识之外,还有创建a和B的知识,这被认为是糟糕的设计吗?我正在附上我正在做的事情的快照合成快照

构造函数注入&;工厂:两种生活时期所需的物品

使用多个线程时,每个线程都应该获得自己的对象图。这意味着,每次对新线程(或线程池中的线程)执行某个操作时,都应该再次向容器询问要使用的根对象。防止将服务从一个线程传递到另一个线程,因为这会将有关服务的线程安全的知识分散到整个代码库中,而通过依赖项注入,您可以尝试将这些知识集中到一个位置(组合根)。当这些知识分散在整个应用程序中时,就很难改变与线程安全相关的组件的行为。

当您这样做时,可能甚至不需要为该类提供两种不同的配置。该类可能只是被注册为瞬态,因为你在定时器的每个脉冲上解析它,每个线程都有自己的实例,或者生存期是有范围的,在这种情况下,类的生存期可能会在定时操作结束时结束。

计时器调用并回调到容器中的代码应该是组合根的一部分。由于服务是在后台线程上解析的,因此您通常必须将该调用封装在某种范围(生存期范围、子容器等)中。这允许该实例(或任何其他注册的服务)在该范围内生存。