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

时间:2010-01-11 08:54:11

标签: c# .net dependency-injection autofac

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

我最终得到了:

  1. 创建单个autofac bootstrapper类以注册配置文件包装器之外的所有依赖项。
  2. 使用IConfiguration接口创建单独的程序集(由所有项目引用)。
  3. 创建每个项目自己的IConfiguration实现。
  4. 通过共享引导程序在每个项目的适当位置启动依赖项。
  5. 在引导程序注册后单独注册项目自己的IConfiguration实现。
  6. 我对Autofac和DI非常陌生,并努力在复杂性和可扩展性之间找到一个很好的平衡。

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

    谢谢。

2 个答案:

答案 0 :(得分:4)

在Autofac中,您可以使用模块来实现此目的。相关组件组封装在一个模块中,该模块由程序化API配置。

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

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

此处的文档可以帮助您入门:http://code.google.com/p/autofac/wiki/StructuringWithModules

HTH

尼克

答案 1 :(得分:3)

根据经验,我只将依赖配置放在.config文件中,如果它们代表我希望能够在不重新编译应用程序的情况下进行更改。默认情况下,我没有这样的配置。

我(还)不知道AutoFac,但是在Castle Windsor中,你可以混合.config和容器的程序化配置,这就是我通常做的事情:我在.config中配置了一些依赖项,因为我想要能够在不重新编译的情况下更改它们,但其余部分在代码中注册(通常按惯例)。

我接近类似于你的问题的方法是创建一个包含专用容器的独立库 - 这听起来很像你的方法。这个专用容器封装了所有常见的依赖配置。

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

我理解你的描述的方式,这种方法似乎与你的描述并不太远,但是让自己受宠,并尽可能多地从XML和代码中移动配置 - 这实际上变得更易于管理。 / p>