2011-01-14 48 views
5

所以我想介紹一個用戶的概念到我的應用程序,並有我自己的一套自定義登錄例程等工作正常。在我的模塊中,我將IUserSession綁定到我的實現和InSingletonScope。Ninject每個會話單身?

現在我懷疑是這種情況,並且已經能夠證明這不是正確的做法,如果我嘗試和兩個用戶在同一個站點上登錄,我只能得到一組數據。

如果我實現了MembershipProvider,我是否避免這種限制。我知道,如果我實行會員供應商,我沒有注入的一切,但是我登錄不只是一個用戶名/密碼,怎麼去與其他數據「登錄?

回答

11

InSingletonScope跨共享整個應用程序的每個用戶會話不限不管你做什麼會改變,你需要用別的東西像InRequestScope但這只是按實際要求共享......

試試這個網站。http://iridescence.no/post/Session-Scoped-Bindings-With-Ninject-2.aspx

public static class NinjectSessionScopingExtention { 
    public static void InSessionScope<T>(this IBindingInSyntax<T> parent) { 
     parent.InScope(SessionScopeCallback); 
    } 

    private const string _sessionKey = "Ninject Session Scope Sync Root"; 

    private static object SessionScopeCallback(IContext context) { 
     if (HttpContext.Current.Session[_sessionKey] == null) { 
      HttpContext.Current.Session[_sessionKey] = new object(); 
     } 

     return HttpContext.Current.Session[_sessionKey]; 
    } 
} 
+0

是還有一種更適合MVC用戶會話的方法嗎?這完全符合我的需要,可以讓軟件正常工作,但爲了將來的參考,您是否k現在有任何定製會員提供商的例子嗎? – Hammerstein 2011-01-14 13:22:40