codecampserver中的StaticFactory <t>是一个众所周知的模式吗?</t>

时间:2009-12-17 09:06:46

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

CodeCampServer源代码包含通用StaticFactory

我猜想这是框架如何与依赖注入很好地协作的关键部分。

使用它的DefaultUnconfiguredState的子类为自己提供静态访问,以及依赖解析机制可以替换为工作内容的默认未配置状态。

我无法找到任何相关的文档...

the book是否有一个很好的解释? (我正在等待从亚马逊送货......)

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

更新

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

默认情况下,使用此工厂会抛出异常:

  

“如何创造的知识   存储库不驻留在   厂。这个工厂只是   代表返回的能力   存储库“

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

  

“重要的是两者都没有   核心项目和UI项目   应参考基础设施   纯粹的项目或图书馆   基础设施。我们有   NHibernate完全关闭了   一边让剩下的   应用程序并不关心数据如何   访问正在发生“

关于新章节中的示例代码的最后一点是工厂不再是静态的(至少不是涉及面向外部的接口)。

更新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(即应用程序启动时)< / p>

我在杰弗里的文章“Onion Architecture: Part 4 - After Four Years

中发现了这一点

2 个答案:

答案 0 :(得分:7)

好问题。我也不喜欢它。它应该真的命名为“StartupFactoryConfiguration”,但它位于重构列表中。

我们将这个想法作为一种方法来为不通过容器注入构造函数的地方设置DI。

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


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

工厂的实现是最终调用IoC对手,但它允许从代码中的位置访问,而无需对IoC容器组件进行汇编引用。

此致 杰弗里巴勒莫

答案 1 :(得分:5)

任何静态都是DI的敌人。

这个StaticFactory看起来像是Service Locator(反)模式的实现。

我认为Service Locator是一个反模式,因为它对API的用户完全不透明,需要依赖于它们;因此,人们可以轻松地在服务定位器抛出的上下文中调用对象上的方法,而API绝对不会让你知道这种情况。

正确的DI,如大量使用构造函数注入,是一个更好的选择。