【问题标题】:Does Autofac have a best practice for *optional* Xml configuration?Autofac 是否有*可选* Xml 配置的最佳实践?
【发布时间】:2010-11-30 21:48:42
【问题描述】:

背景:我想向其他一些开发人员分发一个库(类似于 SDK 或抽象一些内部 Web 服务的工具包)。我使用 Autofac 来注入不同版本的底层服务,主要用于存根。我想将此程序集分发给范围广泛的开发人员:了解 IoC 的用户和不了解 IoC 的用户。

对于任何精明的开发人员,他们都可以创建自己的实现以进行注入。否则,开发人员应该能够在没有配置的情况下使用程序集,并且永远不会知道或关心 IoC 正在幕后发生。

有趣的东西:我可以为 Autofac 提供 Xml 配置,或者我可以以编程方式配置组件(后者是首选方法)。在这种情况下,直到运行时我才知道配置了什么,因此可能需要 Xml 配置。有没有办法让 Autofac 使用 Xml 配置(如果存在),如果没有提供则忽略它?

注意:我可以通过检查特定部分(“autofac”)的配置来手动实现这一点;如果不存在,则不要调用

builder.RegisterModule(new ConfigurationSettingsReader());

有没有比手动检查配置更好的方法(最好是隐藏在 Autofac 中的神奇东西,因为它似乎可以做任何你要求的事情!)

【问题讨论】:

    标签: .net ioc-container autofac


    【解决方案1】:

    我在 autofac 上唯一能看到的是 wiki 上的这个页面: http://code.google.com/p/autofac/wiki/StructuringWithModules 你基本上已经在这样做了。在所有其他注册之后运行 XML 注册。

    您的程序检查应该没问题,但我想知道配置设置阅读器是否可以自动选择使用特定类型“Autofac.Configuration.SectionHandler,Autofac”的任何内容。如果它可以自动拾取,我会检查是否在未定义任何内容时尝试从配置设置中读取是否会使您的应用程序崩溃。

    【讨论】:

    • 它在没有配置的情况下中断。你得到参数异常“无法读取配置部分'XXX''错误,因此问题。
    • 我真的想知道您是否愿意使用 MEF 或其他类型的注册机制来允许用户扩展您的库。
    • 只是事后的注意:我们最终废弃了这部分。 IoC 最终对我们的观众来说有点太遥远了。如果我们最终做类似的事情,你是对的。 MEF 在这里绝对是一种可靠的方法。
    【解决方案2】:

    要检查您的配置是否有特定部分,您应该使用ConfigurationManager.OpenExeConfiguration。它会给你一个Configuration object 并从那里检查 Sections 属性以确定是否存在 Autofac 部分处理程序类型的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-31
      • 2014-10-20
      相关资源
      最近更新 更多