是否应该处理注入的属性?

简短的最佳实践问题:如果一个对象A被注入另一个对象B,那么对象B应该实现IDisposable并在B处理时配置A?

我一般会说不; dependency injection的本质意味着注入的对象对注入的对象的生命周期知之甚少; 在某种程度上,这是注射的定义。 因此,我不认为注入的物体应该处理它注入的任何东西; 注入代码应该负责知道它注入的所有对象的完整生命周期,并且当它们上的所有操作都完成时,应该能够正确地处理它们,而不是之前。

如果您指的是dependency injection模式,我认为这取决于对象B中关于对象A的实现的知识。这样做dependency injection的原因通常是因为您事先不知道对象A将如何已实施,是否需要IDisposable。 你唯一知道的就是界面。

添加此行为将导致两个类IMO之间更紧密的耦合。

(编辑:回答时,我不清楚问题是关于IoC / DI;我会留在这里作为参考,但首先看一下接受的答案)。

如果“注入”你的意思是B承担A所有权,那么是; 这样的例子就像StreamReader

如果它只使用 A一段时间(但A继续超过B ),那么没有。

某些API允许您指定(在构造函数上)是否应该假定所有权(即是否清理注入的对象)。 一个例子是GZipStream

我认为这最终会成为主观的。

这一切都归结为,谁应该控制对象A的生命周期?

比如说对象C和D也有对象A注入它们,在这种情况下你不希望对象B过早地处理对象A.

但是,在某些情况下,当您知道对象A的生命周期应该以B结尾时,将对象B处理为对象A是完全合适的。

我的2p将争辩说,当B被处置时不应该处理A. dependency injection的整个想法是,你不必担心你收到的对象的行为和生命周期,你只需要把它们交给他们。

然后,您希望确保在不再需要对象时立即清除对象。 也许创建一个迷你事件系统,以便您可以通知它需要处理? 我想这真的取决于背景。