C# 是否应处置注入的财产?

C# 是否应处置注入的财产?,c#,C#,简短的最佳实践问题:如果一个对象A被注入到另一个对象B中,那么对象B是否应该实现IDisposable并在处理B时处理A 我认为这最终会是主观的 归根结底,谁应该控制对象的生命周期 比如说,对象C和D也将对象A注入其中,在这种情况下,您不会希望对象B过早地处理对象A 但是,在某些情况下,当您知道对象A的生存期应以B结束时,让对象B处理对象A是完全合适的。如果您指的是模式,我认为这取决于对象B中关于对象A实现的知识。像这样进行依赖项注入的原因通常是因为您事先不知道对象A将如何实现,以及它是否需要I

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

我认为这最终会是主观的

归根结底,谁应该控制对象的生命周期

比如说,对象C和D也将对象A注入其中,在这种情况下,您不会希望对象B过早地处理对象A


但是,在某些情况下,当您知道对象A的生存期应以B结束时,让对象B处理对象A是完全合适的。

如果您指的是模式,我认为这取决于对象B中关于对象A实现的知识。像这样进行依赖项注入的原因通常是因为您事先不知道对象A将如何实现,以及它是否需要IDisposable。你只知道界面

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

(编辑:在回答时,我不清楚这个问题是关于IoC/DI的;我将把它留在这里以供参考,但首先看看公认的答案)

如果“注入”是指
B
拥有
A
的所有权,则是;这方面的例子如下

如果它只使用了
A
一段时间(但
A
B
之后继续存在),则不会


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

我的2p主张,当B被处置时,不应处置A。依赖注入的整个思想是,您不必担心所接收对象的行为和生命周期,只需将它们交给您即可


然后,您要再次确保对象在不再需要时立即被清理。也许可以创建一个小型事件系统,以便您可以通知一个需要处理的事件?我想这实际上取决于上下文。

我通常会说不;依赖项注入的性质意味着注入的对象不太了解注入对象的生命周期;在某种程度上,这就是注入的定义。因此,我不认为被注入的物体应该处理它被注入的任何东西;注入代码应负责了解其注入的所有对象的完整生命周期,并应能够在所有操作完成时正确处置这些对象,而不是之前。

在这种情况下,您需要某种引用计数,以便对象A不会在某些类使用它之前被处理掉。