Tôi biết có một số câu hỏi giống như câu hỏi này nhưng tôi không thể tìm bất kỳ tài liệu nào và không có câu hỏi nào khác có bất kỳ câu trả lời nào giúp tôi, tại đây:Bắt Ninject mới nhất làm việc với MVC 5/Web Api 2 mới nhất?
Tôi tạo ASP mới. NET ứng dụng (VS2013), MVC được chọn, tôi thêm API. Tôi chạy "update-package" trong Package Console để cập nhật lên phiên bản mới nhất (MVC 5.1.2, Web Api 5.1.2).
Sau đó, tôi thêm các gói Ninject.MVC5 và Ninject.Web.WebApi mới.
tôi thêm những dòng này vào file web.config (Ninject muốn phiên bản 5.0, tôi có 5.1):
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
</dependentAssembly>
Trong App_start/NinjectWebCommon.cs nộp tôi thêm một đơn ràng buộc:
private static void RegisterServices(IKernel kernel) {
kernel.Bind<ILogger, NLogLogger>();
}
Sau đó, tôi thêm một ApiController duy nhất, với ILogger là tham số duy nhất trong hàm tạo và tôi thêm ILogger làm tham số cho hàm tạo của HomeController.
Đó có phải là thử nghiệm không?
Tôi có thiếu một số hệ thống dây điện cho WebApi không? Hay điều đó xảy ra "đằng sau hậu trường"?
Dù sao, acessing bộ điều khiển api mang lại cho tôi lỗi này:
An error occurred when trying to create a controller of type 'TestController'. Make sure that the controller has a parameterless public constructor.
Và cố gắng các HomeController mang lại cho tôi điều này:
Object reference not set to an instance of an object.
tôi đã cố gắng điều tương tự, mà không cần cập nhật các gói mới nhất , cùng một vấn đề. Tôi đã sử dụng Ninject trong nhiều năm với MVC 3 (Tôi cũng đã thử các gói Ninject.MVC3), và hoàn toàn không biết gì về lý do tại sao mà không hoạt động. Với WebApi, tôi đã chờ đợi một số cuộc gọi đến SetResolver, nhưng ..
Bất kỳ trợ giúp nào sẽ được đánh giá cao!
Đó là những gì sẽ xảy ra khi bạn làm việc với Ninject trong nhiều năm, nhưng với sự trừu tượng ở giữa! Cảm ơn bạn rất nhiều! Chỉ cần để làm rõ, những gì bạn có nghĩa là với "Đăng ký ILogger một lần cho cả hai" là tôi đăng ký nó một lần, và sau đó nó hoạt động cho cả MVC và WebApi? Ít nhất là những gì dường như đã xảy ra. –
@Remo Gloor: câu trả lời của bạn có lỗi cú pháp. Vui lòng thêm '()' sau 'kernel.Bind'. Vì vậy, mã trả lời đầy đủ sẽ là: 'kernel.Bind () .To ();'. Tôi mệt mỏi cải thiện câu trả lời này, nhưng dường như các Review guys đã không tìm thấy bất kỳ điều hữu ích trong việc sửa lỗi cú pháp !!! –