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你到底想在这里实现什么?