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

时间:2009-05-20 21:11:32

标签: c#

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

5 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

如果“注入”是指B取得A的所有权,那么是;例如StreamReader

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

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

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:1)

我的2p会争辩说,当处置B时,不应该处理A.依赖注入的整个想法是你不必担心你所接收的物体的生命周期和生命周期,你只需交给他们。

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