C# 使用.NET核心和抽象(基类)类进行依赖项注入

C# 使用.NET核心和抽象(基类)类进行依赖项注入,c#,inheritance,dependency-injection,.net-core,C#,Inheritance,Dependency Injection,.net Core,我有一个抽象类,由从它继承的其他两个类使用: public abstract class FiltererBase { ColorsOrderer colorsOrderer; public FiltererBase(ColorsOrderer colorsOrderer) { this.colorsOrderer = colorsOrderer; } protected string OrderColors(string colors

我有一个抽象类,由从它继承的其他两个类使用:

public abstract class FiltererBase
{
    ColorsOrderer colorsOrderer;

    public FiltererBase(ColorsOrderer colorsOrderer)
    {
        this.colorsOrderer = colorsOrderer;
    }

    protected string OrderColors(string colors)
    {
        return string.Join("", colors.ToCharArray().OrderBy(i => colorsOrderer.Order[i]));
    }
}


public class Filterer1 : FiltererBase
{
    public Filterer1(ColorsOrderer colorsOrderer)
        : base(colorsOrderer) { }
}

public class Filterer2 : FiltererBase
{
    public Filterer2(ColorsOrderer colorsOrderer)
        : base(colorsOrderer) { }
}
如您所见,我正在使用依赖项注入(DI)并将实例化的类从子构造函数传递给父构造函数


这真的是使用抽象(基类)进行DI的最佳方法吗?.NET核心框架不是提供了一种更自动的方法吗?

不幸的是,不可能将参数注入父构造函数

你可以用一个小盒子

将代码重构为组合方法时,会出现如下情况:

public class ColorFilter
{
    ColorsOrderer colorsOrderer;

    public ColorFilter(ColorsOrderer colorsOrderer)
    {
        this.colorsOrderer = colorsOrderer;
    }

    public string OrderColors(string colors)
    {
        return string.Join("", colors.ToCharArray().OrderBy(i => colorsOrderer.Order[i]));
    }
}


public class Filterer1
{
    ColorFilter colorFilter;

    public Filterer1(ColorFilter colorFilter)
    {
        this.colorFilter = colorFilter;
    }

    public string OrderColors(string colors)
    {
        return this.colorFilter(colors);
    }
}

public class Filterer2
{
    ColorFilter colorFilter;

    public Filterer2(ColorFilter colorFilter)
    {
        this.colorFilter = colorFilter;
    }

    public string OrderColors(string colors)
    {
        return this.colorFilter(colors);
    }
}

看起来很好,应该是这样的。您不能直接注入抽象类,因为抽象类本身无法实例化。@Roman.Pavelko好的,我正在寻找一种不太手动的方法来实现这一点,在这种情况下,我将有多个抽象类,它们将有几十个类似的依赖项……有太多的情况下,框架不知道该做什么。例如,您的派生类接受2个
colorSorder
参数,但抽象类只接受一个-框架应该传递哪一个?如果抽象类有多个构造函数,一个接受一个参数,另一个接受2,该怎么办。框架应该调用哪一个?编译器/框架需要处理的情况太多,因此保持简单,您需要调用基本构造函数yourself@ibiza你到底想在这里实现什么?