При попытке создать обьект через контейнер 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<BlogDbContext>().ToSelf().InRequestScope();
_kernel.Bind<IRepository<Tag>, Repository<Tag>>();
_kernel.Bind<IMapper>().ToConstant(mapper);
var repository = _kernel.Get<IRepository<Tag>>();// вылетает exception
_kernel.Bind<ITagService, TagService>();
}
Класс Repository
public class Repository<T> : IRepository<T> where T : class
{
private readonly BlogDbContext _db;
public Repository(BlogDbContext db)
{
_db = db;
}
}
P.S. Не знаю важно ли это, но репозиторий с его интерфейсом находится в одной сборке, а регистрация Ninject
в другой.
Ошибка говорит о том, что в экземпляре объекта не задана ссылка на объект.
Object reference not set to an instance of an object.
В этих двух строчках
_kernel.Bind<IRepository<Tag>, Repository<Tag>>();
_kernel.Bind<ITagService, TagService>();
Вы "говорите" IoC-контейнеру, что при запросе IRepository<Tag>
или Repository<Tag>
, необходимо вернуть реализацию, но не указываете ее.
Правильным будет следующий вызов.
_kernel.Bind<IRepository<Tag>>().To<Repository<Tag>>();
_kernel.Bind<ITagService>().To<TagService>();
Вы сообщаете IoC-контейнеру, что при запросе IRepository<Tag>
создать экземпляр класса Repository<Tag>
. Для второй строки аналогично.
И ответ на вопрос из комментария:
для контекста делаю InRequestScope(), нужно ли мне это делать и для репозитория и для сервиса?
Для репозитория и Сервиса не нужно делать InRequestScope()
, только для контекста BlogDbContext
UPD
Не знаю важно ли это, но репозиторий с его интерфейсом находится в одной сборке, а регистрация Ninject в другой.
Не важно, главное указать ссылка на сборку в которой лежит репозиторий и интерфейсы
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Есть объект, наследованный от IEnumerableStackOverflowException возникает в методе MoveNext этого класса, на строчке с Regex
Здравствуйте! Такая задача: ipconfig - автоматическое определение ip-адресов, как это реализовать на c#? Те
У меня есть EF 6x, несколько сущностей и с полем Id у каждой (типа Guid), которые сконфигурены как