构造函数外部的C#对象构造

Ale*_*sev 5 c# dependency-injection

当涉及到设计类和它们之间的"通信"时,我总是试图以这样的方式设计它们,使得所有对象构造和组合都发生在对象构造函数中.我不喜欢从外部发生对象构造和组合的想法,就像其他对象设置属性和调用我的对象上的方法来初始化它一样.当多个对象尝试对您的对象执行此操作并且您永远不知道您的props\methods将以何种顺序执行时,这尤其会变得丑陋.

不幸的是,我常常对这种情况感到困惑,特别是现在随着依赖注入框架的日益普及,许多库和框架依赖于某种外部对象初始化,并且通常不仅需要对我们的对象进行构造函数注入,而且还要求属性注入.

我的问题是:

  1. 是否可以让对象依赖于某些方法,或者在它们上调用属性,之后他们可以认为它们被初始化了?

  2. 当你的对象是接收器时,它是某种模式,并且必须支持多个调用它的接口,这些调用的顺序是否重要?(比设置标志更好的东西,比如ThisWasDone,ThatWasCalled)

jga*_*fin 9

是否可以让对象依赖于某些方法,或者在它们上调用属性,之后他们可以认为它们被初始化了?

不会.初始化方法很痛苦,因为无法保证它们会被调用.一个简单的解决方案是切换到接口并使用工厂或构建器模式来组成实现.

@Mark Seemann写了一篇关于它的文章:http://blog.ploeh.dk/2011/05/24/DesignSmellTemporalCoupling.aspx

当你的对象是接收者时,是否存在某种模式,并且必须支持多个调用它的接口,这些调用的顺序是否重要?(比设置标志更好的东西,比如ThisWasDone,ThatWasCalled)

生成器模式.