autofac - 在多模块应用程序中正确使用

时间:2012-03-26 14:15:40

标签: c# architecture autofac

我正在开发一个由许多模块组成的应用程序,其中一些模块依赖于其他模块。我现在决定使用Autofac来解决循环依赖关系并改进体系结构。

要配置autofac,我使用xml方法(http://code.google.com/p/autofac/wiki/XmlConfiguration)。

现在我不确定如何实现Autofac。我是否需要在应用程序的每个模块中引用autofac?这意味着每次我想要解决依赖关系时我必须注册所有组件......

ContainerBuilder builder = new ContainerBuilder();
builder.RegisterModule(new ConfigurationSettingsReader("autofac", configPath));
IContainer container = builder.Build();
IWhatever w = container.Resolve<IWhatever>();

这是这样做的吗?

或者在单独的模块中包装Autofac会更好吗? 使用这种方法,我只需要注册一次模块(当应用程序启动时),并且可以使用包装的Autofac来解决依赖关系......

IWhatever w = container.Resolve<IWhatever>();

我希望有人能告诉我使用Autofac的最佳方法。

谢谢!

2 个答案:

答案 0 :(得分:7)

如果您想使用autofac模块,每个项目都需要依赖autofac核心包。

使用此处所述的autofac模块:http://autofac.readthedocs.io/en/latest/configuration/modules.html

<强>更新

我在此处描述了为什么要使用模块:http://www.codeproject.com/Articles/386164/Get-injected-into-the-world-of-inverted-dependenci

答案 1 :(得分:-2)

容器的独立模块不仅是更好的选择,它是唯一正确的选择。 AFAIK IoC容器实例必须是单例。

至少我以这种方式使用Unity - 您创建公共可用的容器静态实例,在应用程序启动时初始化它,然后从所有模块访问它。