2009-10-28 27 views
0

我的工作與支持的類庫我的業務邏輯,數據訪問代碼沿着一個ASP.Net網站等處理依賴注入 - 邏輯走向何處?

我非常新的,陌生的統一框架和依賴注入作爲一個整體。不過,我已經設法通過遵循codeplex上ASP.NET 3.5 Portal Starter Kit的源代碼來實現它。但這裏存在的問題是:

類庫設置爲Unity,我的幾個類在其屬性上有[Dependency]屬性(我專門爲此使用了屬性設置器注入)。然而,Global.asax告訴Unity如何處理類庫中的注入....

這是最佳實踐還是應該類庫處理它自己的注射,以便我可以與其他網站,webapps或應用程序重新使用該庫?如果確實如此,那麼在這種情況下注入代碼會在哪裏?

我不確定問題有多清楚。如果我需要更多解釋,請告訴我。

+0

看看這個答案:http:// stackoverflow。com/questions/589374/how-to-use-dependency-injection-with-asp-net/3849338#3849338 – Steven 2010-10-03 10:12:21

回答

1

雖然不熟悉Unity(StructureMap用戶)最終的映射應該存在於消費應用程序中。你可以讓你使用的dll定義了這些映射,但你也希望能夠在需要時覆蓋它們。就像說你需要一個IFoo的實例,並且你有一個映射到你的類庫中,但是你已經添加了一個新的來使用它,只是在網站上。讓站點中定義的映射允許你保持鬆散耦合,否則你爲什麼使用DI容器?

+0

謝謝,這似乎是有道理的,我會同意如果我沒有去那條路線,那麼有一個DI容器不會有多大意義。 非常感謝。 – WesleyJohnson 2009-10-28 22:21:57

1

就我個人而言,我嘗試編寫代碼來促進IOC容器,但從不嘗試強制IOC容器進入項目。

我的解決方案細分大致爲: (這些都是項目)。

  • Project.Domain
  • Project.Persistence.Implementation
  • Project.Services.Implementation
  • Project.DIInjectionRegistration
  • Project.ASPNetMVCFrontEnd(我使用MVC,但它並不重要)。

我嘗試對項目引用保持嚴格的界限。實際的前端項目不能直接包含任何* .Implementation項目。 (在這種情況下,* .implementation項目包含域中接口的實際實現)。因此,ASPNetMVCFrontEnd具有對域和DI注入的任何和我的DI容器的引用。

在Project.DIInjectionWhatever我把所有的東西都捆綁在一起。所以這個項目包含了所有對實現和DI框架的引用。它包含執行組件註冊的代碼。 Autofac讓我能夠輕鬆地分解組件註冊,所以這就是我採用這種方法的原因。

在這裏的示例中,我沒有任何對我的實施項目中容器的引用。它沒有問題,如果你的實現需要它,那麼繼續。

+0

感謝您的額外信息。我對你所說的一切都有些遺憾(再一次,我對這一切都是超級新的),但是我會繼續閱讀,直到我得到它。 :) – WesleyJohnson 2009-10-29 06:32:16

+0

不用擔心,有人最終會在IoC容器上編寫300頁的手冊,向每個人解釋它。 – Min 2009-10-29 17:06:41