2011-10-24 25 views
7

Tôi đã thấy những điều sau hai ví dụ cho tiêm User IPrincipal:MVC3 + Ninject: Cách thích hợp để tiêm User IPrincipal là gì?

Phương pháp 1:

kernel.Bind<IPrincipal>() 
    .ToMethod(context => context.Kernel.Get<RequestContext>().HttpContext.User) 
    .InRequestScope(); 

Cách 2:

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

Có sự khác biệt trong hai? Được ưa thích nhất?

+0

Làm cách nào để hoàn thành việc sử dụng Autofac ở trên? – lafama

+0

Tìm thấy câu trả lời của tôi http://stackoverflow.com/questions/2824649/passing-asp-net-user-by-dependency-injection – lafama

+0

bạn sẽ cần sử dụng Ninject.Web.Common cho phương thức mở rộng 'InRequestScope' –

Trả lời

5

Hai phương pháp giống nhau. Cả hai đều sẽ trả về HttpContext obect cho yêu cầu HTTP hiện tại.

+0

Nếu đúng như vậy, tôi rõ ràng sẽ chọn tùy chọn ngắn gọn hơn. Bất kỳ ý tưởng tại sao tất cả các rắc rối của "context.Kernel.Get" trong Phương pháp 1? – Shawn

+0

Ví dụ đầu tiên sẽ là cần thiết nếu bối cảnh bạn đang sử dụng là một loại ContextProvider khác. Vì bạn sử dụng nhà cung cấp HttpContext trên toàn cầu có sẵn thông qua System.Web, nên không cần thiết cho lần đầu tiên. –

+0

Tuyệt vời. Cảm ơn bạn. – Shawn

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