Helpers - компьютеры, интернет, программирование

Я использую ninject 3.0 и asp.net mvc 3. Я получаю сообщение об ошибке при активации IProductRepository.

Я новичок в MVC, поэтому я использую пример книги. Но когда я запускаю программу, она выдает ошибку: Ошибка активации IProductRepository Нет доступных привязок, и тип не является самопривязываемым. Путь активации...

Я прочитал кучу статей и других ошибок, подобных этой, но ни одна из них не помогла. Почему так происходит, если все так же, как в книжном примере? Пожалуйста, некоторая помощь будет очень признательна.

public class NinjectControllerFactory : DefaultControllerFactory
{
    private IKernel ninjectKernel;

    public NinjectControllerFactory()
    {
        ninjectKernel = new StandardKernel();
    }

    protected override IController GetControllerInstance(RequestContext requestContext,
       Type controllerType)
    {
        return controllerType == null
            ? null
            : (IController)ninjectKernel.Get(controllerType);
    }

    private void AddBindings()
    {
        ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>(); 
    }
}

Global.asax.cs

 protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
        ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
    }

IProductRepository.cs

public interface IProductRepository
{
    IQueryable<Product> Products { get; }
}

EFProductRepository.cs

public class EFProductRepository : IProductRepository
{
   private EFDbContext context = new EFDbContext();
   public IQueryable<Product> Products
    {
        get { return context.Products; }           
    }
}

public class EFDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }    
}

Продуктконтроллер.cs

public class ProductController : Controller
{
    private IProductRepository repository;

    public ProductController(IProductRepository repoParam)
    {
        repository = repoParam;
    }

    public ViewResult List()
    {
        return View(repository.Products);
    }
}

  • вызовите AddBindings() в конструкторе NinjectControllerFactory 11.05.2015
  • В этом была проблема @MikeDebela. Большое спасибо за быстрый ответ! 11.05.2015

Ответы:


1

Измените свой метод, чтобы принять параметр IKernel:

private void AddBindings(IKernel kernel)
{
    kernel.Bind<IProductRepository>().To<EFProductRepository>(); 
}

Затем, как предлагает Майк, вызовите его из метода конструктора NinjectControllerFactory:

public NinjectControllerFactory()
{
    ninjectKernel = new StandardKernel();
    AddBindings(ninjectKernal);
}
11.05.2015
Новые материалы

Интуитивное понимание тензоров в машинном обучении
Тензор является важной концепцией во многих научных областях, таких как математика, физика, обработка сигналов и компьютерное зрение, и это лишь некоторые из них. В математике тензор — это..

Использование машинного обучения для диагностики болезни Альцгеймера, часть 4
Маркеры семантической согласованности для ранней диагностики болезни Альцгеймера (arXiv) Автор: Давиде Колла , Маттео Дельсанто , Марко Агосто , Бенедетто Витиелло , Даниэле Паоло Радичони..

Почему объяснимость так важна прямо сейчас?
По мере того, как системы искусственного интеллекта и инструменты на основе машинного обучения распространяются в нашей повседневной жизни, как практики, так и критики все чаще заявляют о..

Анимированный математический анализ
Использование Manim для создания математических анимированных визуализаций Визуализация данных помогает понять скрытые закономерности в данных, которые невозможно визуализировать..

Создание простого слайдера изображений с помощью JavaScript
Узнайте, как создать базовый слайдер изображений с помощью HTML, CSS и JavaScript. Введение В этом уроке мы создадим удобный слайдер изображений, используя JavaScript, HTML и CSS. Ползунок..

Создание базы данных с помощью супергероя «Python»
В этом посте мы узнаем, как создать «базу данных SQLite с помощью модуля python sqlite3, создав простую функцию входа и регистрации. Готовы ли вы к этому путешествию? Если да , давайте приступим..

ИИ для чайников: руководство для начинающих по пониманию будущего технологий
Вы чувствуете, что остались позади в мире ИИ? Не волнуйтесь, вы не одиноки! Со всей этой шумихой вокруг искусственного интеллекта может быть трудно понять, с чего начать. Но не позволяйте сленгу..