Tôi là người mới sử dụng Ninject và tôi không thể tìm ra cách tiêm vào trình xử lý http chung của mình. Tôi có một dự án MVC3 và tôi đang tiêm dịch vụ của mình vào bộ điều khiển mà không có vấn đề gì cả. Đây là những gì tôi có trong lớp Ninject App_start tôi đăng ký dịch vụ:Làm thế nào để tiêm vào một số trình xử lý http asp.net chung sử dụng Ninject?
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<NLSubscriber.Core.Service.Repository.INLUserRepository>().To<NLSubscriber.Core.Service.Repository.EFDAL.EFNLUserRepository>().InRequestScope();
kernel.Bind<Neticon.Mvc.Helpers.IConfigHelper>().To<Neticon.Mvc.Helpers.AzureEnabledConfigHelper>().InSingletonScope();
kernel.Bind<Neticon.Security.Service.IAuthenticationService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateAuthenticationService()).InRequestScope();
kernel.Bind<Neticon.Security.Service.IMembershipService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateMembershipService()).InRequestScope();
kernel.Bind<Neticon.Security.Service.IRoleManagerService>().ToMethod(m => Neticon.Security.Service.SecurityServiceFactory.CreateRoleManagerService()).InRequestScope();
Khi tôi cố gắng để có được một số dịch vụ từ xử lý chung của tôi bằng cách sử dụng tiêm tài sản (với [tiêm] thuộc tính) Tôi luôn luôn nhận được null. Đây là cách xử lý của tôi trông giống như:
public class SubscriberHandler : IHttpHandler
{
[Inject]
public INLUserRepository userRep { get; set;}
public void ProcessRequest(HttpContext context)
{
var users = userRep.GetUsers(); //userRep is always null here
}
public bool IsReusable
{
get
{
return false;
}
}
}
Tôi cũng đã cố gắng làm việc đó như thế này:
readonly INLUserRepository userRep;
public SubscriberHandler()
{
using (IKernel kernel = new StandardKernel(new App_Start.NJRepositoryModule()))
{
userRep = kernel.Get<INLUserRepository>();
}
}
nhưng tôi nhận được một ngoại lệ:. "Lỗi tải Ninject phần ICache Không thành phần như vậy có Gợi ý: 1) Nếu bạn đã tạo một lớp con tùy chỉnh cho KernelBase, hãy đảm bảo rằng bạn đã thực hiện đúng cách triển khai phương thức AddComponents() 2) Đảm bảo rằng bạn đã không xóa thành phần khỏi container qua cuộc gọi đến Xoá bỏ hết(). 3) Đảm bảo bạn đã không vô tình tạo ra nhiều hơn một hạt nhân."
Đó là gợi ý với tôi rằng tôi không được phép khởi tạo nhiều hơn một hạt nhân trong ứng dụng của tôi, phải không? Tôi đang làm gì sai? Cảm ơn
Bản sao có thể có của http://stackoverflow.com/questions/3629472/httphandler-property-injection-using-ninject-returning-null – Andreas