Я новичок в Injection Dependency и в настоящее время использую Ninject как мой DI. Я играл с приложением ASP.Net MVC 5 и читал «Pro ASP.NET MVC 5». Я следовал примерам в книге о том, как настроить и использовать Ninject. Ниже приведен код для моего регистра услуг:Ninject - Ошибка загрузки компонента Ninject ICache
private static void RegisterServices(IKernel kernel)
{
kernel.Bind<ICustomerRepository>().To<CustomerRepository>();
kernel.Bind<ICustomerUserDataRepository>().To<CustomerUserDataRepository>();
}
Что касается моего контроллера у меня ниже:
public class CustomerController : Controller
{
private ICustomerRepository customerRepository;
public CustomerController(ICustomerRepository customerRepo)
{
this.customerRepository = customerRepo;
}
// GET: Customer
public ActionResult Index(int Id = 0)
{
Customer customer = customerRepository.GetCustomer(Id).First();
return View(customer);
}
}
Это прекрасно работает, как ожидалось в книге. Тем не менее, я играл с другим кодом и хотел использовать Ninject для разрешения некоторых зависимостей. Например, я работаю над пользовательским помощником для одного из моих просмотров Razor. В моих хелперах коды у меня есть следующий:
using (IKernel kernel = new StandardKernel())
{
ICustomerUserDataRepository customerUserDataRepo = kernel.Get<ICustomerUserDataRepository>();
Когда я запускаю это, он жалуется, что нет привязки определяется для ICustomerUserDataRepository. Я предполагаю, что это потому, что я использую новое ядро без определенных привязок. Я прочитал, что вам нужно загружать привязки в ядрах через модули. Так что я сделал следующее:
public class MyBindings : NinjectModule
{
public override void Load()
{
Bind<ICustomerUserDataRepository>().To<CustomerUserDataRepository>();
}
}
я затем загрузить модуль при установке моего ядра ниже:
using (IKernel kernel = new StandardKernel(new MyBindings()))
{
ICustomerUserDataRepository customerUserDataRepo = kernel.Get<ICustomerUserDataRepository>();
Это, однако, вызывает «Ошибка при загрузке Ninject компоненты ICACHE» сообщение об ошибке, когда я запустить приложение. Я был бы признателен за помощь в том, что я делаю неправильно и что я не понимаю. Я прочитал, что несколько определенных ядер могут вызвать эту ошибку. Разве я не предполагаю использовать новое ядро в моем вспомогательном методе, поскольку он уже используется и привязан под RegisterServices()? Если да, я полагаю, чтобы получить доступ к существующему ядру в моем вспомогательном методе? Или я на правильном пути и нуждаюсь в новом ядре, загружающем определенные привязки в моем модуле? Спасибо.
Благодарим за отзыв и попробуем! – mike