0

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

所以对象 C 基本上有两个生命周期。

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

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

4

1 回答 1

1

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

当您这样做时,可能甚至不需要为该类设置两种不同的配置。该类可能只是被注册为瞬态,并且因为您在计时器的每个脉冲处解析它,所以每个线程都有自己的实例或生命周期是有限的,在这种情况下,类的生命周期可能会在定时操作结束时结束。

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

于 2013-07-29T08:20:52.413 回答