依赖注入陷阱

时间:2010-08-16 07:45:51

标签: asp.net dependency-injection inversion-of-control

有没有人在www上有一个链接列表,列出了一个很好的DI陷阱列表? 我一直试图在asp.net webforms应用程序中使用DI注入控件,并发现在递归构建时ViewState丢失了。 在应用程序中实现IoC / DI的重大步骤之前,开发人员需要了解的文章列表也很有帮助。

1 个答案:

答案 0 :(得分:3)

DI本身没有陷阱。或者更准确地说,它就像枚举通用编程陷阱一样,如传递空引用然后不检查它。

  

关于递归构建ViewState丢失

像某些容器所说的“积累”通常是一个坏主意,应该尽可能避免。看看Windsor FAQ有一些很好的理由来反对积累。这适用于所有IoC容器。

特别是在您的情况下,似乎发生的事情是在控件的LoadViewState()(或页面的LoadPageStateFromPersistenceMedium())之后发生了堆积,因此它使得视图状态无效。也许你的IoC容器提供了一个已经处理好这个的基本控件类,你忘了继承它。

恕我直言,在WebForms中做DI是如此的hackish(例如这种情况),我更喜欢求助于服务位置(仅适用于WebForms页面和控件!)。简单,不需要任何奇怪的黑客攻击。

现在, IoC + DI 可以有一些陷阱,例如生命周期/范围问题。 Igor Brejc covers this very thoroughly in this article。您必须牢记这一点,特别是在具有大量组件的复杂/大型应用程序中。