2010-08-16 53 views
2

有没有人有关于DI陷阱的好名单的链接列表? 我一直试图注入控制使用DI,在一个asp.net webforms应用程序,发现在递归构建ViewState丢失。 也可能会有帮助的文章列表,其中开发人员需要知道陷阱之前采取在应用程序中实施IoC/DI的一大步。依赖注入陷阱

回答

3

DI本身没有问题。或者更确切地说,这将像枚举一般编程问题一样,如传递空引用,然后不检查它。

递归积聚的ViewState

丢失

“积累”为某些容器所说的那样,通常是一个坏主意,并应尽可能避免。看看Windsor FAQ有一些很好的防止积木的原因。这适用于所有IoC容器。

特别是,你的情况似乎是在控件的LoadViewState()(或者页面的LoadPageStateFromPersistenceMedium())之后发生了堆积,所以它渲染了viewstate无效。也许你的IoC容器提供了一个基本的控制类,它已经处理了这个,你忘了继承它。恕我直言,在WebForms中做DI是很冒险的(例如这种情况),我宁愿诉诸服务位置(只适用于WebForms页面和控件!)。简单,并且不需要奇怪的黑客。

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

+0

我已经尝试过在控件Init Eventoverler中调用Unity.BuildUp的注入。子控件的递归循环导致视图状态丢失。如果注射是通过注射特定的对照而明确的,那么就可以很好地... – chugh97 2010-08-16 15:10:18

+0

@ chugh97:好吧,这对我的口味来说太过ha ish。 – 2010-08-16 15:23:39

+0

IoC和DI之间的区别/关系:http://www.betaversion.org/~stefano/linotype/news/38/ – 2010-08-16 23:56:12