.net - codecampserver 中的 StaticFactory<T> 是众所周知的模式吗?

标签 .net dependency-injection service-locator onion-architecture abstract-factory

CodeCampServer 源代码包含一个通用的 StaticFactory .

我推测这是框架如何与依赖注入(inject)良好配合的机制的关键部分。

其子类使用它的 DefaultUnconfiguredState 来提供对它们自己的默认未配置状态的静态访问,依赖解决机制可以用工作的东西代替它。

我找不到任何有关此的文档...

the book 中有没有很好的解释? (我正在等待亚马逊的送货......)

...或者其他人可以提供一个很好的评论这是什么以及我是否明智地采用这种模式(如果它是一个......)?

更新

由于 Jeffrey Palermo 回答了这个问题,我看到在 MVC2 in Action 的(正在进行的)手稿中,使用用于定位存储库以保持域层无知的工厂讨论和说明了这种模式/风格持久性问题。 (见 chapter 23)。

默认情况下,使用此工厂会引发异常:

"the knowledge of how to create the repository doesn’t reside with the factory. This factory merely represents the capability to return the repository"



该示例可以使用几种机制之一来初始化存储库接口(interface)的具体实现。在书中的示例中,为了简单起见,他们选择不使用 IOC 容器,并在某些启动逻辑中明确提供它。

"The important thing is that neither the Core project nor the UI project should reference the Infrastructure project or libraries that are purely infrastructural in nature. We have kept NHibernate completely off to the side so that the rest of the application doesn’t care how the data access is happening"



关于这一新章节中示例代码的最后一点要注意的是,工厂不再是静态的(至少就面向外部的接口(interface)而言不是)。

更新 2

巴勒莫先生在博客上写了更多关于 this particular style of Abstract Factory 的信息(参见 OrderShipperFactory 的实现)。

我也可以just consider 'Manual Dependency Injection' (鲍勃叔叔)。

更新 3 - 2016 年 3 月

another example of it here ,尽管 Jeffrey 明确表示这是演示代码,并且注释表明这将在 Mark Seeman 所称的 Composition Root 中进行配置(即在应用程序启动时)

我在 Jeffrey 的文章“Onion Architecture: Part 4 - After Four Years”中发现了这一点

最佳答案

好问题。我也不喜欢。它确实应该命名为“StartupFactoryConfiguration”,但它在重构列表中。

我们将这个想法作为一种为未通过容器进行构造函数注入(inject)的地方设置 DI 的方法。

它会消失。我不知道反模式是什么(什么名字?),但 StaticFactory 会死。

现在它已从今天早上起重新命名。现在是 AbstractFactoryBase。它是抽象工厂模式的实现:http://en.wikipedia.org/wiki/Abstract_factory_pattern

工厂的实现最终会调用 IoC 容器,但它允许从代码中的某个位置访问,而无需对 IoC 容器程序集的程序集引用。

问候,
杰弗里·巴勒莫

关于.net - codecampserver 中的 StaticFactory<T> 是众所周知的模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1920385/

相关文章:

c# - StructureMap 通过注入(inject)而不是服务定位来解决依赖

c# - C# 中的字典枚举

asp.net-core - .NET Core 2、DI、配置文件

.net - 如何安全地将文件保存到磁盘而没有被 Windows 拒绝的风险?

java - Spring - 在 Java 配置类中注入(inject)构造函数参数

.net - 尝试创建实例时没有合适的构造函数

caSTLe-windsor - 使用不是为 IOC 设计的遗留应用程序避免服务定位器反模式

flutter - 如何在不使 main() 异步的情况下将异步对象注册到 get_it 包?

.net - C++/CLI 的重点是什么?

c# - 如何在 .NET 中使用 C# 编辑 div 的 CSS 样式