【发布时间】:2010-10-19 21:12:47
【问题描述】:
我正在尝试接受使用 IoC/依赖注入,同时对合约而不是特定类进行编程。我面临的困境是:
为 IoC 编写接口程序:我开始使用 IoC 时严重依赖接口。从 Spring 的示例项目来看,接口是使用 IoC 进行合约编程时要走的路。
(...虽然通常首选抽象类:the main drawback of interfaces is that they are much less flexible than classes when it comes to allowing for evolution of APIs)
通过构造函数明确类依赖 我的直觉是,将依赖项传递给类的构造函数是一种很好的编程习惯。确实,这个是依赖注入。
...除非您不能在接口/抽象类中强制执行构造函数签名:接口或抽象类都不允许定义构造函数签名( easily / elegantly )。 另请参阅Framework Design Guidelines section 4.4: 不要在抽象类型中定义公共或受保护的内部构造函数。 ...仅当用户需要创建该类型的实例时,构造函数才应该是公共的。
这个问题与之前的stackoverflow问题有关:Interface defining a constructor signature?
但我的问题是:
由于您不能在 C# 接口/抽象类中定义构造函数,正如上面的问题所问的那样,在实际层面上:
你如何协调这与passing dependencies in via a constructor的明智做法?
编辑:感谢您的回答。我希望对我在这种情况下应该做什么有所了解。只是不使用构造函数参数?使用某种具有依赖关系的 Init() 方法? Edit2:感谢您的出色回答,非常有帮助。
【问题讨论】:
标签: c# interface dependency-injection inversion-of-control abstract-class