2010-08-16 38 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