2011-10-05 59 views
1

我設計具有以下層如何實例化服務層類自定義成員資格提供

  • 數據層應用(W在EF 4.1的頂/通用庫)
  • 服務層 - 所有業務邏輯到這裏
  • ASP.NET MVC 3網站和ServiceStack.NET Web服務

我想實現一個自定義的成員提供利用我的服務/資源庫

我最初的目的是從提供者中調用服務層方法,但當然,我不能使用DI(通過Ninject),因爲成員資格是由框架處理的,並阻止我使用構造函數注入。

我試圖通過在供應商的初始化方法中實例化我UserService類的一個實例:

userService = (UserService)Activator.CreateInstance(typeof(UserService)); 

但考慮到用戶業務依賴於信息庫由Ninject注入,這並不爲工作回購從未被注入。

我在這裏錯過了什麼?解決這個問題最簡單的方法是什麼?我應該從一個完全不同的角度來看這個嗎?

編輯:這裏是要求

public class UserService : IUserService 
{ 
    private readonly IUserRepository userRepository; 
    private readonly IUnitOfWork unitOfWork; 

    public UserService(IUserRepository userRepository, IUnitOfWork unitOfWork) 
    { 
     this.userRepository = userRepository; 
     this.unitOfWork = unitOfWork; 
    } 


    //methods(AddUser, etc.)... 

} 
+0

DI只存在於頂層嗎?在其他層中不需要DI。頂部我引用你的MVC應用程序。 –

+0

我實際上在所有圖層中使用DI來注入圖層之間的依賴關係。服務層類依賴於存儲庫,所以服務層是圍繞接口構建的,並且注入了具體的回購站。 DI只在global.asax的頂層設置,如果這就是你的意思?我的方法是不好的做法? – stephen776

+0

實際上,我的整個體系結構仿照此示例:http://efmvc.codeplex.com/只有我使用Ninject而不是Unity – stephen776

回答

0

如果您的核心問題是測試,使您的DI工作我的用戶服務,那麼一種選擇是門面會員位和創建一個接口關閉門面。然後,您可以設置單元測試,甚至可以使用某種類型的IoC容器(DI)庫。

+0

這個的任何例子? – stephen776

+0

我可能在某些舊代碼中有一個,但我不確定是否還有它。我會看,但這將是這個週末。但是,如果這個概念足夠讓我滾動,我確實有其他類型外牆的例外。 –

相關問題