我研究过像 Nerddinner 和 ContactManager 这样更简单的应用程序以及像 Kigg 这样更复杂的应用程序。我了解简单的,现在我想了解更复杂的。
通常,较简单的应用程序在 LINQtoSQL 或实体框架之上具有存储库类和接口(尽可能松散耦合)。从控制器调用存储库以执行必要的数据操作。
当我检查更复杂的应用程序(如 Kigg 或 Oxite)时,我看到的一种常见模式是引入(我在这里只是触及表面,但我必须从某个地方开始):
- IOC DI(以 Kigg 为例)
- Web 请求生命周期管理器
- 工作单元
以下是我的问题:
我知道,为了真正拥有松散耦合的应用程序,您必须使用 Unity 之类的东西。但似乎在您将 Unity 引入组合的那一刻,您还必须引入 Web 请求生命周期管理器。这是为什么?为什么像 Nerddinner 这样的示例应用程序没有 Web 请求生命周期管理器?它究竟是做什么的?它是 Unity 特有的吗?
我注意到的第二种模式是引入工作单元。同样的问题:为什么 Nerddinner 或 ContactManager 不使用工作单元?相反,这些应用程序使用 Linq2Sql 或实体框架之上的存储库类来执行数据操作。没有任何工作单元的迹象。它到底是什么,为什么要使用它?
谢谢
下面是 Nerddiner 在 DinnersController 级别的 DI 示例:
public DinnersController()
: this(new DinnerRepository()) {
}
public DinnersController(IDinnerRepository repository) {
dinnerRepository = repository;
}
那么我是否正确地假设由于第一个构造函数控制器“拥有”DinnerRepository,因此它将取决于控制器的生命周期,因为它在那里被声明?