C# 依赖注入与构造函数重载

C# 依赖注入与构造函数重载,c#,dependency-injection,C#,Dependency Injection,我正在从事一个.net核心项目,其中每个控制器都有自己的DI服务。所有这些服务都共享一些公共内容,因此我抽象了一个BaseService类: public class BaseService { public BaseService(IHttpContextService srv) { ... } } 这个BaseService,或者换句话说,所有服务都需要另一个HTTP上下文服务 现在,如果我需要新控制器的新服务,我需要继承此BaseService:

我正在从事一个.net核心项目,其中每个控制器都有自己的DI服务。所有这些服务都共享一些公共内容,因此我抽象了一个
BaseService
类:

public class BaseService
{
    public BaseService(IHttpContextService srv)
    {
        ...
    }
}
这个
BaseService
,或者换句话说,所有服务都需要另一个HTTP上下文服务

现在,如果我需要新控制器的新服务,我需要继承此
BaseService

public class MyFirstService : BaseService
{
    public MyFirstService(IHttpContextService srvHttp, AdditionalService srvAdditional) {}
}
在其构造函数中,我需要再次指定
IHttpContextService
,以及该
MyFirstService
需要的一些附加服务

但这似乎是错误的,因为孩子是后代,因此自然应该拥有
IHttpContextService
。更不用说,这个子类没有一个与祖先类参数相同的构造函数,这会导致编译错误


有没有一种方法可以在构造函数之外DI对象?还是从.net内核中去掉DI?或者我应该改变我的设计模式?

派生类必须构造它们的基类。我不太愿意提出建议,但是
BaseService
中的属性注入在这种情况下可能会有所帮助。请注意,有些人认为属性注入是“不纯净的”依赖注入,这就是为什么我不愿意提出建议的原因。不,我是说,调用基类的构造函数是派生类的责任,尽管.NET在明确的情况下(即没有基类构造函数或无参数基类构造函数)会自动为您这样做。因此,本质上,您可以按照madreflection的建议使用属性注入,通过派生构造函数接受服务并将其传递给基类,或者按照您的建议将基类与派生类完全分离。我假设您指的是ASP.NET Core。它有一个内置的容器。我知道它支持属性注入,因为它通过
@inject
指令将服务注入Razor视图。