我有一个使用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)'
该错误是有道理的,因为现在我有一个构造函数,我猜是在期望什么。
有什么线索可以解决这个问题,但是我仍然可以在
BaseRepository
类中进行依赖注入吗?
更新
我只是尝试删除构造函数并使用属性[Inject]
,但是在调试时,我看到_entityRepo
是NULL
。
答案 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; }
}