#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 в другой. Не важно, главное указать ссылка на сборку в которой лежит репозиторий и интерфейсы
Комментариев нет:
Отправить комментарий