2010-04-28 18 views
14

Tôi đã tự hỏi làm thế nào tôi có thể ràng buộc IPrincipal để HttpContext.Current.User trong Asp.net Mvc với Ninject.Asp.net Mvc: Ninject - IPrincipal

lời chào thân thiện,

Pickels

Edit:

Không chắc nếu vấn đề nhưng tôi sử dụng lớp CustomPrincipal của riêng tôi.

Trả lời

27

Bạn có thể làm điều này mà không cần đến một nhà cung cấp trong NinjectModule của bạn:

Bind<IPrincipal>() 
    .ToMethod(ctx => HttpContext.Current.User) 
    .InRequestScope(); 

Lưu ý, tôi bao gồm .InRequestScope() để đảm bảo rằng giá trị của phương pháp này là lưu trữ một lần cho mỗi yêu cầu HTTP. Tôi khuyên bạn nên làm như vậy ngay cả khi bạn sử dụng cơ chế nhà cung cấp.

+0

Xin cảm ơn, đó là một mẹo tuyệt vời. – Pickels

+0

Không có vấn đề, hy vọng nó sẽ giúp! –

2

Nghĩ rằng tôi đã nhận nó:

public class PrincipalProvider : IProvider 
{ 
    public object Create(IContext context) 
    { 
     return HttpContext.Current.User; 
    } 

    public System.Type Type 
    { 
     get { return typeof(CustomPrincipal); } 
    } 
} 

Và trong NinjectModule của tôi, tôi làm:

Bind<IPrincipal>().ToProvider<PrincipalProvider>(); 

Nếu đây là sai hoặc không hoàn thành xin vui lòng cho tôi biết và tôi sẽ điều chỉnh/xóa.

+0

có thể duy trì IProvider trên các lớp khác nhau, bao gồm cả các lớp không tham chiếu đến web không? – Haroon