2011-01-14 27 views
5

Vì vậy, tôi đang cố gắng giới thiệu khái niệm về người dùng đến ứng dụng của tôi và đã có bộ thói quen đăng nhập tùy chỉnh của riêng tôi, v.v. hoạt động tốt. Trong mô-đun của tôi, tôi đang ràng buộc IUserSession của mình để triển khai và InSingletonScope.Ninject mỗi phiên singleton?

Bây giờ tôi nghi ngờ đây là trường hợp và đã có thể chứng minh rằng đây không phải là điều phải làm, nếu tôi thử và đăng nhập với hai người dùng trên cùng một trang, tôi chỉ nhận được một bộ dữ liệu.

Nếu tôi triển khai MembershipProvider, tôi có tránh hạn chế như vậy hay không. Tôi biết rằng nếu tôi thực hiện một nhà cung cấp thành viên, tôi không phải tiêm mọi thứ, nhưng thông tin đăng nhập của tôi không chỉ là tên người dùng/mật khẩu, làm cách nào để đăng nhập bằng dữ liệu bổ sung? "

Trả lời

11

InSingletonScope được chia sẻ toàn bộ ứng dụng không giới hạn mỗi phiên sử dụng không có gì bạn sẽ thay đổi điều đó, bạn cần phải sử dụng một cái gì đó khác như InRequestScope nhưng đó là chỉ chia sẻ theo yêu cầu thực tế ...

Hãy thử trang web này:.. 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

Is có một phương pháp phù hợp hơn cho các phiên người dùng trong MVC? Điều này phù hợp với nhu cầu của tôi một cách hoàn hảo để làm cho phần mềm hoạt động, nhưng để tham khảo trong tương lai, bạn có bây giờ của bất kỳ ví dụ về các nhà cung cấp thành viên tùy chỉnh? – Hammerstein

+0

Tắt đầu của tôi Tôi không thể nghĩ ra bất kỳ cách nào mà một nhà cung cấp thành viên tùy chỉnh sẽ nhận được xung quanh thực tế là bạn vẫn cần phải lưu trữ thông tin của bạn trong một phiên. Nhà cung cấp tư cách thành viên của bạn sẽ thực hiện tiêm - nếu tôi hiểu chính xác bạn. – Buildstarted

+1

Mã này sẽ cung cấp cho bạn các vấn đề nếu HttpContext.Current là null, hoặc nếu HttpContext.Current.Session là null (chẳng hạn như bên trong một HttpModule). – cbp

Các vấn đề liên quan