C # класс наследует от базового класса с конструктором с внедрением зависимости - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть проект, использующий Dependency Injection (Ninject), где у меня есть следующий класс:

public class SecurityService : BaseService
    {
        ISecurityRepository _securityRepo = null;

        public SecurityService(ISecurityRepository securityRepo)
        {
            _securityRepo = securityRepo;
        }
}

Поскольку на BaseService будут ссылаться во многих других классах обслуживания, я хотел добавить тудаметод, который также идет в хранилище данных и получает некоторую информацию, поэтому мне не нужно повторять один и тот же код для других классов обслуживания.

Вот что у меня есть для BaseRepository:

public partial class BaseService
    {

        IEntityRepository _entityRepo = null;

        public BaseService(IEntityRepository entityRepo)
        {
            _entityRepo = entityRepo;
        }

         public Settings AppSettings
        {
            get
            {
                return _entityRepo.GetEntitySettings();
            }
        }
}

Но при компиляции я получаю следующую ошибку:

There is no argument given that corresponds to the required formal parameter 'entityRepo' of 'BaseService.BaseService(IEntityRepository)'   

enter image description here

И эта ошибка имеет смысл, потому что теперь у меня есть конструктор, который яЯ думаю, что-то ожидает.

Есть какие-нибудь подсказки, как это исправить, но у меня все еще может быть инъекция зависимостей в BaseRepository классе?

ОБНОВЛЕНИЕ

Я только что попытался удалить конструктор и использовать атрибут [Inject], но при отладке я вижу, что _entityRepo это NULL.

enter image description here

Ответы [ 3 ]

0 голосов
/ 19 сентября 2018

Я мог бы заставить его работать:

Я просто преобразовал частную собственность в публичную, и тогда атрибут [Inject] начал работать.

public partial class BaseService
    {
        [Inject]
        public IEntityRepository EntityRepo { get; set; }

}
0 голосов
/ 19 сентября 2018

Добавьте зависимость в конструктор для производного класса и передайте ее.

public SecurityService(ISecurityRepository securityRepo, IEntityRepository entityRepo)
    : base(entityRepo) 
{
    _securityRepo = securityRepo;
}
0 голосов
/ 19 сентября 2018

Передайте объект Repository в базовый класс через конструктор дочернего класса:

public SecurityService(ISecurityRepository securityRepo) : base(IEntityRepository)
{
  //Initialize stuff for the child class
}
...