1

如果我有一个从主应用程序启动的线程。在此线程中生成事件。每次生成事件时都会创建一个对象。在那个对象中需要依赖,所以我想注入那个对象。如何将此依赖关系传递给创建的对象?我是否需要向下传递依赖关系(并让在线程中工作的类知道依赖关系)还是有更好的方法来做到这一点?顺便说一句,我正在使用 Unity。

4

1 回答 1

4

最安全的方法是让每个线程在开始时构建一个新的对象图。不要通过其他线程传递依赖项。

通过依赖注入,您尝试集中有关对象生命周期的知识。这个集中的地方被称为Composition Root. 当您开始将依赖项从一个线程传递到另一个线程时,代码的那些部分必须知道传递这些依赖项是否安全。例如,这些依赖项是线程安全的吗?在许多情况下,这可能很容易分析,但会阻止您使用其他实现更改这些依赖项,因为现在您必须记住代码中有一个地方发生了这种情况,并且您需要知道传递了哪些依赖项。您再次分散了这些知识,使得推理 DI 配置的正确性变得更加困难,并且更容易以导致竞争条件的方式错误配置容器。

您可以在此 wiki 页面上找到有关此主题的更多信息:如何在多线程应用程序中使用依赖注入

于 2012-04-23T13:42:48.217 回答