考虑下面的代码:在C#中,是否有办法强制一些属性在对象初始化器中初始化?
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.
};
动机:这个问题向我走来时,我试图通过属性,而不是在构造函数中注入依赖。
使它成为构造函数的一部分,你不能用对象初始值设定项来做到这一点(据我所知)。 – Hristo
@Chris:这是我试图避免的。当我们想添加新的依赖关系时,通过构造函数注入依赖关系会导致很多问题。我们必须沿着依赖关系链向每个构造函数添加一个新参数。 –
所以你想防止[时间耦合](http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/),但没有原子初始化?哈哈哈......那是不可能的。 – Steven