c#类从具有构造函数的基类继承并注入依赖项

时间:2018-09-19 20:15:48

标签: c# ninject

我有一个使用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],但是在调试时,我看到_entityRepoNULL

enter image description here

3 个答案:

答案 0 :(得分:1)

通过子类构造函数将Repository对象传递给基类:

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

答案 1 :(得分:1)

将依赖项添加到派生类的构造函数中,并传递它。

public SecurityService(ISecurityRepository securityRepo, IEntityRepository entityRepo)
    : base(entityRepo) 
{
    _securityRepo = securityRepo;
}

答案 2 :(得分:0)

我可以使它起作用:

我只是将私有财产转换为公共财产,然后[Inject]属性开始起作用。

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

}