【问题标题】:Does Castle Windsor have a Static Class Similar to StructureMap's ObjectFactory?Castle Windsor 是否有类似于 StructureMap 的 ObjectFactory 的静态类?
【发布时间】:2010-09-13 15:24:18
【问题描述】:

我目前正在从 StructureMap 搬到温莎城堡。

使用 StructureMap,您可以在一个中心位置引导框架,然后在代码中的任何位置调用 ObjectFactory.GetInstance 以使用该配置获取实例。因此,从概念上讲,您可以配置一个容器,并且对 ObjectFactory 的调用使用该容器。

在我看到的 Windsor 教程中,容器实例始终是显式创建的,并且通过该容器的实例进行解析。这只是两个框架在方法上的区别吗?

假设是这种情况,处理需要与配置分开进行解析的情况的推荐方法是什么?

(理想情况下,可以在配置代码之后进行单个 Resolve() 调用,并且不存在对容器的其他引用;但是,在某些情况下这是不可能的,例如在使用遗留代码库时。 )

【问题讨论】:

    标签: castle-windsor structuremap


    【解决方案1】:

    不,它没有。而且不会。如果你是从结构图到温莎城堡,read this

    re:如何在不带静态定位器see this 的情况下稍后拉取。

    【讨论】:

    • Typed Factory 设施很棒——长期以来一直在寻找 DI 中特定于上下文的构造的解决方案(我通常只是使用容器来解决)。我确实担心我现在将我的工厂接口耦合到特定的构造函数签名(尽管能够实现 ITypedFactoryComponentSelector)。我可能会发布另一个关于此的问题。谢谢你的回答。
    • 方法参数不以任何方式耦合到 .ctor 签名。它们只是在 Windsor 创建对象时变得可用或“在范围内”,但 Windsor 的工作是找出最佳匹配的构造函数。
    【解决方案2】:

    我不熟悉 Windsor,但如果它还没有自己的静态外观类,那么创建自己的应该很简单。使用包含配置容器的静态属性创建一个静态类。添加从该容器解析实例的静态方法。这正是 ObjectFactory 所做的。 StructureMap 有一个完成所有实际工作的 Container 对象 - ObjectFactory 只是一个方便的包装器。

    【讨论】:

    • 是的,我考虑过。但无论何时使用 ObjectFactory,SM 都会在后台使用相同的容器。所以也许只是使用 GOF Singleton 模式来确保只有一个?否则静态外观将创建新容器并且每次都必须重新配置它们,并且将失去一些生命周期支持。
    • 我误解了你的答案——我现在明白了。该类本质上是“全局的”,因此将完全执行 ObjectFactory 正在执行的操作(在后台使用单个容器)。
    【解决方案3】:

    如果你真的需要这个,请使用CommonServiceLocator。它具有适用于所有主要 IoC 容器的适配器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-11
      • 2014-08-08
      • 2019-03-16
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多