在C#中,有没有办法强制在对象初始值设定项中初始化一些属性?

时间:2015-11-12 14:48:52

标签: c# dependency-injection

请考虑以下代码:

public class ClassA
{
    public int PropertyA { get; set; }
    public int PropertyB { get; set; }
}

// Somewhere else
var obj = new ClassA
{
    PropertyA = 1,
    // Question:
    // How do we force PropertyB to be set here without making it a parameter in the constructor?
    // Ideally in compile time so that the code here would cause a compile error.
};

动机:当我尝试通过属性而不是构造函数注入依赖项时,我遇到了这个问题。

1 个答案:

答案 0 :(得分:3)

也许您没有意识到这一点,但您可以将对象初始化器与构造函数组合在一起。

因此,你可以在构造函数中强制初始化,并仍然允许像这样的对象初始化:

public class ClassA
{
    public ClassA(int propertyB)
    {
        PropertyB = propertyB;
    }

    public int PropertyA { get; set; }
    public int PropertyB { get; set; }
}

因此:

var obj = new ClassA(2 /*Property B*/)
{
    PropertyA = 1
};

但是,在回答您的问题时:不,您不能强制在对象初始化器中初始化属性。