依赖倒置在顶级类(主)
本文关键字:依赖 | 更新日期: 2023-09-27 17:49:56
我想创建一个应用程序,其中我有这两个类,MainApp和模型(在现实中更多,但这是基础和问题的核心)。MainApp也是起始类。我想应用依赖倒置,这样mainApp就不必在每次模型更改时重新构建(好吧,主要是因为它的良好实践)。我不能这样做:
MainApp - - - > IModel
^
|
|
Model
因为我必须在MainApp中创建模型,因为它是我的应用程序的开始,它将是多余的。
我正在考虑将MainApp的内容转移到另一个类,并使用MainApp就像MainAppContents和Model的工厂一样,像这样:
MainApp -------------> Model
| |
| |
v v
MainAppContents - - - > IModel
这是正确的方法,这是否意味着任何一个设计良好的应用程序的开始都是一个工厂?
听起来您是在要求一种方法来启用晚期绑定。为接口编程是第一步,而你已经在这么做了。
下一步是将接口映射到具体类。最简单的方法是使用DI容器。你的Main方法现在看起来像这样:static void Main()
{
var container = CreateContainer();
IModel model = container.Resolve<IModel>();
// use model...
}
我故意省略了CreateContainer helper方法的实现,因为选择DI容器是另一个问题。
所有主流的。net DI容器都支持后期绑定,因此这将使您能够在另一个程序集中实现IModel。IModel接口应该留在消费者(Main)中。
我不太确定问题是什么,但如果MainApp
需要创建Model
的实例,那么您应该使用抽象工厂模式,例如IModelFactory
,它有一个返回新IModel
的方法。
如果你打算使用IoC容器,那么你会希望通过容器解析IModel
。与其让IModelFactory
依赖于容器,不如使用IoC容器的特性为您创建IModelFactory
的具体实现,并隐式地使用容器来解析IModel
。
编辑
我还会说,买马克的书!太好了!
如果你想实现松散耦合,你应该考虑使用依赖注入容器(例如Unity或MEF)。