Страницы

Поиск по вопросам

воскресенье, 8 марта 2020 г.

Ninject не может создать обьект

#c_sharp #net #aspnet_mvc #inversion_of_control #ninject


При попытке создать обьект через контейнер Ninject вылетает exception : Object reference
not set to an instance of an object. Подскажите, пожалуйста, в чем может быть проблема?

Метод с класса NinjectDependencyResolver

private void AddBindings()
        {
            var mapperConfiguration = new MapperConfiguration(cfg =>
            {
                cfg.AddProfile(new TagProfile());
            });
            var mapper = mapperConfiguration.CreateMapper();
            _kernel.Bind().ToSelf().InRequestScope();
            _kernel.Bind, Repository>();
            _kernel.Bind().ToConstant(mapper);

            var repository = _kernel.Get>();// вылетает exception
            _kernel.Bind();
        }


Класс Repository

public class Repository : IRepository where T : class
{
    private readonly BlogDbContext _db;

    public Repository(BlogDbContext db)
    {
        _db = db;
    }
}


P.S. Не знаю важно ли это, но репозиторий с его интерфейсом находится в одной сборке,
а регистрация Ninject в другой.
    


Ответы

Ответ 1



Ошибка говорит о том, что в экземпляре объекта не задана ссылка на объект. Object reference not set to an instance of an object. В этих двух строчках _kernel.Bind, Repository>(); _kernel.Bind(); Вы "говорите" IoC-контейнеру, что при запросе IRepository или Repository, необходимо вернуть реализацию, но не указываете ее. Правильным будет следующий вызов. _kernel.Bind>().To>(); _kernel.Bind().To(); Вы сообщаете IoC-контейнеру, что при запросе IRepository создать экземпляр класса Repository. Для второй строки аналогично. И ответ на вопрос из комментария: для контекста делаю InRequestScope(), нужно ли мне это делать и для репозитория и для сервиса? Для репозитория и Сервиса не нужно делать InRequestScope(), только для контекста BlogDbContext UPD Не знаю важно ли это, но репозиторий с его интерфейсом находится в одной сборке, а регистрация Ninject в другой. Не важно, главное указать ссылка на сборку в которой лежит репозиторий и интерфейсы

Комментариев нет:

Отправить комментарий