另一种通过在ctor中注入基类来实例化派生类的基本部分的方法?

时间:2016-05-06 22:44:13

标签: c# dependency-injection constructor

我有一个基类和派生类,它们结合了许多需要初始化的参数。我想使用依赖注入,更具体地说,在构造派生时注入基本部分。

例如

abstract class Baseclass
{
    private int a, b, c, d, e;

    public Baseclass(int A, int B, int C, int D, int E)
    {
        a = A;
        b = B;
        c = C;
        d = D;
        e = E;
    }

    public Baseclass(Baseclass basepart)
    {
        this = basepart; // error `this` is readonly

        a = basepart.a;  // so I use this method instead
        b = basepart.b;
        c = basepart.c;
        d = basepart.d;
        e = basepart.e;
    }
}

class Derived : Baseclass
{
    public Derived(Baseclass i_Basepart) : base(i_Basepart){}
}

常规的ctor和" copy ctor"看起来非常相似,因为它们有很多参数(比这个例子更多),所以它看起来并不正确。还有另一种方法吗?

1 个答案:

答案 0 :(得分:3)

这是继承的构成发挥作用的地方。您可以将设置移到另一个类中并将其传递到:

class Baseclass
{
    private Parameters parameters;

    public BaseClass(Parameters parameters)
    {
        this.parameters = parameters;
    }
}

class Derived : Baseclass
{
    public Derived(Parameters parameters) : base(parameters) { }
}

class Parameters
{
    int a, b, c, d, e, etc.
}

您甚至可以在Baseclass中编写一些getters / setter,以透明(以调用方式)的方式访问Parameters值。 e.g:

public A { get { return parameters.a; } set { parameters.a = value; } }