【发布时间】:2012-05-15 23:32:55
【问题描述】:
是否有人为 .NET (C#) 创建了一个空的解决方案堆栈,其中包含使用多个项目的 DI 的 IoC 框架? 几个月来,我一直在努力创建一个良好的可重用堆栈:
- MVC UI 网页应用
- 空 BLL 项目(稍后将添加真实实体)
- 空 DAL 项目(稍后将添加真正的 daab 类)
- 参考/搜索数据层
- 包括一个 IoC 框架
- 家庭控制器中 DI 的使用示例,可以通过实体层一直到达 DAL 或通过接口到达所有参考/搜索层
- 不得在 UI 层设置任何具体类的硬引用
我已经尝试过几次,但我总是在 #6 上挂断,而且我缺少堆栈结构中的一些基本内容。有没有人设法做到这一点并有一个示例解决方案来展示它的结构?我可以整天创建堆栈并添加一个 IoC 框架,但完全无法使其结构化,因此没有将具体引用添加到 UI 层。对象的接口/具体解析还能如何进行?
当然,你们中的一些学者已经将其扼杀在萌芽状态,请与我分享一些启示:-)
ps - 我不止一次阅读 Mark Seeman 的书。我了解组合根的概念...但从未见过在 NTier 解决方案中使用它,并且无法成功实施该理论
我正在寻找的是一个包含多个项目的充实的解决方案堆栈,可以用作开始的基础。一种成功实现组合根的方法,可用于通过做而不是告诉来教授 SOLID 原则。一个将这一切变为现实的解决方案。请参阅此question 以供参考。
【问题讨论】:
-
我不知道你说的#7 是什么意思。如果没有具体的类,你会发现很难做很多事情,特别是在 MVC 中,最佳实践规定了具体的 View Model 类,当然还有具体的控制器和其他类。我也不明白如果你没有实体可以“通过”,你怎么能做到 6。
-
我想你误会了。具体存在但不能在 UI 层中硬引用。这就是整个想法对吧?解耦,因此可以将一个具体切换为另一个实现相同接口的具体。但是,如果具体很难引用,它仍然是切换实现的开发工作。所以要求是能够构造堆栈,使引用不在 UI 层中。这是它变得模糊的地方。其他人都在做什么?没有更高级的解决方案堆栈?
-
基本上我在每个 IoC 示例中看到的问题是它的单个项目具有许多内部类和接口。假设所有依赖项都是 ctor 注入的。但是,如果在项目中硬引用了具体类,有什么可以阻止 jr 开发人员更新该类而不是使用注入的接口?
-
我只是从一个空的解决方案开始,实体将在以后添加。空堆栈是构建的起点
-
没有。 DI 并不是要减少重新编译。一般而言,它是关于减少耦合的。即使在一个项目中,您也可以减少耦合,并从中受益匪浅。它是关于使对象更易于测试,它是关于减少跨对象熟悉度,它是关于停止泄漏抽象。它与减少编译无关。事实上,这样的目标不太可行,因为必须加载程序集,而在大多数情况下,仅此一项就是一个硬参考。我想你可以使用 Xml 配置,但这会将你的 interals 暴露给配置文件。
标签: asp.net-mvc-3 visual-studio-2010 c#-4.0 dependency-injection inversion-of-control