0

我目前正在開發MVC4項目,如果Ninject向我的控制器注入UnitOfWork,我使用UnitOfWork + Generic Repository模式。MVC4,UnitOfWork + DI和SimpleAuthentication ..如何去耦?

我不喜歡VS2012 MVC4模板,因爲它直接使用數據庫訪問(例如db初始化)。

我的項目共分:

  • 一個UI項目(mvc4應用程序),以Forms身份驗證

  • 域項目(DB實體,該庫的的UnitOfWork接口和兩個UnifOfWork實現,一個與MOQ和一個EF;他們通過Ninject注入到UI控制器中)。

我看了看這個例子:

http://kevin-junghans.blogspot.it/2013/03/decoupling-simplemembership-from-your.html

與此相關的問題

SimpleMembership - anyone made it n-tier friendly?

現在我有一些問題:

  • 如何在這裏注入我的UoW? WebSecurity類是靜態的,沒有構造器,它直接實例化UoW在db上執行活動...

  • 我總是必須初始化WebMatrix以直接訪問數據庫?這段代碼:

    public static void Register() 
    { 
        Database.SetInitializer<SecurityContext>(new InitSecurityDb()); 
        SecurityContext context = new SecurityContext(); 
        context.Database.Initialize(true); 
        if (!WebMatrix.WebData.WebSecurity.Initialized) 
         WebMatrix.WebData.WebSecurity.InitializeDatabaseConnection("DefaultConnection", 
          "UserProfile", "UserId", "UserName", autoCreateTables: true); 
    } 
    

休息,我去耦域..我怎樣才能讓WebSecurity使用我的UnitOfWork例如?最佳做法是什麼?

  • 我怎麼能存儲更多的數據(例如,EmailAddress的等)和檢索,沒有進行數據庫查詢的每次我都來訪問用戶的個人資料?像舊的CustomPrincipal ... Custom principal in ASP.NET MVC

謝謝!

回答

2

您在這裏有很多問題Marco。讓我刺他們。

如何注入UOW

靜態類和依賴注入不拌勻,作爲pointed out in this QA。當我第一次經歷這個解耦SimpleMembership的練習時,注意力只集中在與領域脫鉤,正如您引用的文章中所討論的那樣。這只是第一步,它可以改進,包括使依賴注入更容易。我辯論是否讓WebSecurity成爲靜態的,並且是靜態的,因爲這是原來的SimpleMembership的實現方式,使得它對SimpleSecurity的用戶更加無縫的轉換。 SimpleSecurity是一個開源項目,歡迎提供貢獻。將其變爲非靜態並不困難,從長遠來看可能是有意義的。一旦它變得非靜態,我們可以使用Factory模式創建UnitOfWork並注入相應的Factory。

爲什麼我必須要註冊WebSecurity?

SimpleSecurity就要到了WebMatrix的WebSecurity類,這需要初始化的包裝。 Register方法只是確保WebMatrix已初始化並初始化我們的數據庫。我不同意在Globa.asax中以這種方式調用它與域以任何方式。使用它與UnitOfWork一起工作應該與應用程序域無關,或者在應用程序啓動時不得不調用Register方法。

我怎麼能存儲更多的數據(例如:電子郵件)和檢索,而不執行每次數據庫查詢?

這是通過使用ClaimsPrincipal實際完成在.NET 4.5很容易。 .NET 4.5中的所有主體都從ClaimsPrincipal繼承,它允許您將聲明中的信息存儲在主體中。索賠基本上是關鍵值對,可讓您在用戶上存儲任何類型的數據。例如,在ASP.NET中,用戶的角色被存儲爲聲明。要添加自己的聲明,您需要執行一項名爲claims transformation的操作。然後檢索信息,您可以create a custom claims principal。將此添加到SimpleSecurity將是一個不錯的功能。

+0

謝謝你的男人。現在聽起來有點乾淨了。我理解你的觀點,但註冊WebMatrix來初步化數據庫聽起來有點骯髒。我的用戶表是域的一部分,我通過UnitOfWork實現了域訪問。爲什麼WebMatrix不能使用我的DAL訪問用戶信息?爲什麼它應該「直接」連接到數據庫?我假設我使用Model-First方法,我的域不需要初始化......當然,這是我的場景。順便說一句,再次感謝你的回答! – 2013-03-28 10:16:01