我有一种情况,我有两种类所需的对象C.其中一个类在单独的线程中运行,另一个在timer elapsed事件的帮助下创建多个线程。
因此,对象C基本上有两个生命周期。
对象C由工厂与A和B一起创建。对于class1,我通过主工厂创建实例,但对于第二个,我将必须通过整个工厂。第二类现在将在运行时间(基于计时器滴答)决定如何创建对象C.
我的问题是关于第二种情况:我正在通过整个工厂,除了创建对象C的知识外,还有创建A和B的知识,这被认为是糟糕的设计吗? 我附上了我正在做的事情的快照 Composition Snapshot
答案 0 :(得分:0)
使用多个线程时,每个线程都应该有自己的对象图。这意味着每次将某些操作分离到新线程(或线程池中的线程)时,都应该再次询问容器以查找要使用的根对象。防止将服务从线程传递到另一个,因为这会在整个代码库中分散有关服务的线程安全性的知识,而使用依赖注入时,您会尝试将这些知识集中到一个位置(组合根)。当这些知识分散在整个应用程序中时,更改线程安全所涉及的组件行为变得更加困难。
执行此操作时,可能不需要为该类配置两种不同的配置。该类可能只是注册为瞬态,并且因为您在计时器的每个脉冲处解决它,每个线程获得自己的实例或生命周期范围,在这种情况下,类的生命周期可能会在定时操作结束时结束。 p>
计时器调用并调回容器的代码应该是组合根的一部分。由于服务是在后台线程上解决的,因此通常必须在某种范围(生命周期范围,子容器等)中包装该调用。这允许该实例(或任何其他注册服务)在该范围的持续时间内生存。