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

roh*_*agg 3 .net dependency-injection service-locator abstract-factory onion-architecture

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

我猜想这是框架如何与依赖注入很好地结合的机制的关键部分.

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

我找不到任何相关文件......

书中有一个很好的解释吗?(我正在等待从亚马逊送货......)

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

更新

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

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

"关于如何创建存储库的知识不在工厂中.这个工厂只代表返回存储库的能力"

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

"重要的是,Core项目和UI项目都不应该引用基础设施项目或纯粹基础设施的库.我们已经将NHibernate完全放在一边,以便应用程序的其余部分不关心如何数据访问正在发生"

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

更新2

Palermo先生在博客上发表了关于抽象工厂这种特殊风格的更多信息(参见OrderShipperFactory的实现).

我也可以考虑'手动依赖注入'(Uncle Bob).

更新3 - 2016年3月

这里有另一个例子,虽然Jeffrey明确表示这是演示代码,而评论表明这将配置在Mark Seeman所谓的组合根(即应用程序启动时)

我在杰弗里的文章发现了这个" 洋葱体系结构:第4部分-四年后的 "

Jef*_*rmo 7

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

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

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


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

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

此致,杰弗里巴勒莫


Mar*_*ann 5

任何静态都是DI的敌人.

此StaticFactory看起来像Service Locator(反)模式的实现.

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

适当的DI,如大量使用Constructor Injection,是一个更好的选择.

  • 我在我的博客中做了一些关于注入或依赖位置的分析,并且很高兴在这里提供反馈(http://dzmitryhuba.blogspot.com/2009/08/inject-or-locate-dependencies.html). (2认同)