我正在开发一个由许多模块组成的应用程序,其中一些模块依赖于其他模块。我现在决定使用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的最佳方法。
谢谢!
答案 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 - 您创建公共可用的容器静态实例,在应用程序启动时初始化它,然后从所有模块访问它。