2016-01-22 58 views
0

我想分開我的ASP。 NET MVC 5 + WebApi2溶液放入單獨的邏輯項目,所以(在我的腦海)我:使用DI(Autofac)和Identity時分開的ASP.NET項目參考

  • Data.csproj
    • 引用EF6和處理代碼第一次遷移
  • 模型.csproj
    • 引用自動映射器
    • refrences數據(上圖)
  • Services.csproj
    • 參考模型(上圖)
  • Web.csproj
    • 引用autofac
    • 上述
  • 引用服務

但由於

  1. 身份撒都在我的Web.csproj
  2. 模型和EF引用我不能讓我真正的項目的樣子,當我在Web.csproj配置Autofac和嘗試註冊我的DbContexts以及其他項目中的其他依賴項,我需要訪問具體的類型,因此在Web中設置DI時,Web需要引用所有其他項目?

這是一個由ASP .NET模板自動生成的全新項目。謝謝。

+0

我的觀點2涉及到:http://stackoverflow.com/questions/9501604/ioc-di-why-do-i-have-to-reference-all-layers-assemblies-in-entry-application,所以我猜這是可以的所有程序集引用的Web,因爲那是組成的根? – Ali

回答

0
  1. 通常,您可以通過不在Web項目中引用數據模型來避免將實體框架污染到您的Web代碼中。 例如,如果您將模型的接口放置在單獨的基礎架構項目中,則不會再有這個問題。您的'服務'可以返回不依賴於EF的抽象類型,並減少耦合。

  2. 就我個人而言,我喜歡用一個單獨的項目來解決這個問題,該項目負責工廠代碼或者(甚至更好的IMO),爲每個項目負責構建自己的對象。將工廠代碼放在同一個地方可以進一步減少耦合,並且可以使重構變得更容易。

一件事...

如果這是一個新的項目,爲什麼你甚至不需要一個DI容器。當你對自己的需求有更好的瞭解時,你總是可以使用窮人的依賴注入並重構。他們經常過度使用或用作柺杖來隱藏過於複雜的lasagna code。這是一種令人難以置信的有用和強大的技術,但靈活性的大部分好處也可以通過設計良好的工廠和建設者來實現。這些可以提高可讀性的額外好處。

+0

我想我需要一些更具體的參考來介紹如何將ASP NET身份數據和應用程序上下文移動到自己的項目中。還有如何將Autofac啓動代碼移動到Web UI之外的獨立項目 - 如果這是您的建議。 – Ali