代码之家  ›  专栏  ›  技术社区  ›  Valentin V

使用DI框架处理多个配置文件的良好实践

  •  4
  • Valentin V  · 技术社区  · 16 年前

    在我当前的解决方案中,我有18个项目,其中大多数都有自己的配置文件(app.config或web.config)。每个项目使用单个共享的BLL程序集。我正在使用autopac来处理依赖项,但还没有一个合适的方式来管理我的配置。 配置条目大致相同,但值不同。有些项目使用自定义配置秒,而有些则不使用。

    我的结局是:

    1. 创建一个autopac引导程序类以注册所有依赖项 除了 配置文件包装器。
    2. 使用IConfiguration接口创建单独的程序集(由所有项目引用)。
    3. 创建每个项目自己的IConfiguration实现。
    4. 通过共享引导程序在每个项目的适当位置引导依赖项。
    5. 在引导注册之后分别注册项目自己的IConfiguration实现。

    我对autofac和di非常陌生,并且努力在复杂性和可扩展性之间找到一个很好的平衡点。

    有没有更好的方法来管理配置文件?

    谢谢您。

    2 回复  |  直到 16 年前
        1
  •  4
  •   Nicholas Blumhardt    16 年前

    在自动空调系统中,你使用模块来实现这个目的。相关组件组封装在由编程API配置的模块中。

    autofac的XML配置支持模块,因此一旦决定在应用程序中使用模块,就可以在配置文件中注册该模块(而不是它包含的所有组件)。

    模块支持可以转发到内部组件的参数,例如连接字符串、URI等。

    这里的文档应该可以让您开始: http://code.google.com/p/autofac/wiki/StructuringWithModules

    高温高压

    尼克

        2
  •  3
  •   Mark Seemann    16 年前

    根据经验,我只在.config文件中放置依赖项配置,前提是它们表示我希望在不重新编译应用程序的情况下能够更改的内容。默认情况下,我没有这样的配置。

    我还不知道autofac,但是在castle windsor中,你可以混合.config和容器的编程配置,这就是我通常做的:我在.config中配置了一些依赖项,因为我希望能够在不重新编译的情况下更改它们,但其余的都是在代码中注册的(通常是按约定)。

    我处理类似于您的问题的方法是创建一个包含专门容器的单独库-这听起来很像您的方法。这个专门化的容器封装了所有常见的依赖项配置。

    在每个应用程序中,我都有一个更加专门化的容器,它从共享容器派生,并覆盖它需要覆盖的任何配置。

    我理解您的描述的方式是,这种方法似乎与您的描述没有太大的区别,但请您自己帮个忙,尽可能多地将配置从XML中移出并转换到代码中—这样实际上更易于管理。

    推荐文章