对基类的依赖注入

时间:2019-01-09 18:03:03

标签: c# dependency-injection

为具有继承自类A的类B的DI设置DI是否可行,这反过来实现了接口I,就像这样:

public interface I {
 SomeMethod();
}

public abstract class A : I {
//some code ...
}

public class B : A {
//some code...
}

问题是DI是否可以在这样的方案上工作,我的意思是为B类设置DI?

2 个答案:

答案 0 :(得分:1)

通常,DI容器(例如Castle,Unity,Autofac等)使您可以区别类型注册和接口链接。

F.e。在Autofac中,您可以注册单一类型并声明一些基类和接口:

builder.RegisterType<B>()
       .AsSelf()
       .As<A>()
       .As<I>();

现在,当您需要B类,B类或A接口时,将解析I类的实例。

答案 1 :(得分:0)

如果你使用的是 ASP.NET Core,你可以简单地使用一个通用的 Base Controller 类:

public abstract class BaseController<T> : Controller
{
    private IFoo _fooInstance;
    private IBar _barInstance;

    protected IFoo _foo => _fooInstance ??= HttpContext.RequestServices.GetService<IFoo>();
    protected IBar _bar => _barInstance ??= HttpContext.RequestServices.GetService<IBar>();
}

如果您使用的是 Razor 页面:

class BasePageModel<T> : PageModel where T : class
{
    private IFoo _fooInstance;
    private IBar _barInstance;

    protected IFoo _foo => _fooInstance ??= HttpContext.RequestServices.GetService<IFoo>();
    protected IBar _bar => _barInstance ??= HttpContext.RequestServices.GetService<IBar>();
}
相关问题