我遇到了以下问题,在我的基本 Controller 中我进行了依赖注入(inject)。我有一个实现基本 Controller 的子类,我需要传递构造函数。所以我的疑问是,我实现依赖注入(inject)的方式是否正确? 如果不是,最好的方法是什么?
我用unity实现D.I,ide是VS2017 web api 2。
按照我使用的代码: 基本 Controller 或父 Controller :
public class BaseController : ApiController
{
public string[] includes = null;
private readonly IFiltroServico servico;
public BaseController(IFiltroServico _servico)
{
servico = _servico;
}
}
泛型类型的基础 Controller 实现基础 Controller :
public abstract class BaseController<E, R, F> : BaseController
where E : class
where R : class
where F : class
{
private readonly IFiltroServico servico;
public AreaFormacaoController(IFiltroServico _servico): base(_servico)
{
servico = _servico;
}
}
子 Controller :
public abstract class BaseController<R> : BaseController
where R : class
{
private readonly IFiltroServico servico;
public AreaFormacaoController(IFiltroServico _servico): base(_servico)
{
servico = _servico;
}
//services of controller;
}
最佳答案
您不需要一遍又一遍地定义私有(private)字段servico
,因为它已经在基本 Controller 中预设了。只需在基类中将其定义为 protected readonly
并在子类中使用即可。
除此之外你的代码没问题。
子级在构造函数中具有相同的依赖参数是完全合理的,因为它继承了最有可能依赖依赖的基类的行为。
另一种选择是使用 property injection在基类中,但您需要向该属性添加一个特定于统一的属性。我不喜欢这样,因为您将您的代码直接绑定(bind)到 Unity。
关于c# - 在 Base Controller 中实现依赖注入(inject)的最佳方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49406645/