我已经创建了一些Autofac模块......现在我想使用web.config在我的容器中注册其中一些...在我的web.config中我写道:
<autofac defaultAssembly="Autofac.Example">
<modules>
<module type="DebugModuleTest1"></module>
<module type="DebugModuleTest2"></module>
</modules>
</autofac>
现在我必须建立我的容器。但是autofac文档对我来说并不清楚。我不明白我必须做什么来阅读我的模块并构建容器。
public class MyCustomContainer
{
public void Build(HttpConfiguration config)
{
var builder = new ContainerBuilder();
Microsoft.Extensions.Configuration.ConfigurationBuilder x = new Microsoft.Extensions.Configuration.ConfigurationBuilder();
//var sec = x.AddInMemoryCollection().Build().GetSection("autofac");
// var y = x.AddXmlFile("Web.config");
var y = new ConfigurationBuilder().SetBasePath(AppDomain.CurrentDomain.BaseDirectory);
var z = y.AddXmlFile("Web.Config");
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
我使用的是最新版本的Autofac,因此我没有ConfigurationSettingsReader
课程。
有人可以帮我吗?
修改
我在web.config上找到了有趣的保存配置,因为通过这种方式我可以改变&#34; web.config根据我的解决方案配置(你知道,经典的web.debug.config,web.release.config等)......
这可以帮助我注册正确的模块,避免使用指令(#if bla bla bla,...)或只是条件......
我已经在使用模块,但我认为正确的解决方案是在模块中添加一个属性,以根据我想要部署项目的选定环境选择要解析的组件。
我只想到这个解决方案example(顺便提一下,Flexibility to Override仍然引用ConfigurationSettingsReader
。这样可以吗?)
答案 0 :(得分:1)
在4.0版本的配置中,您不会在web.config中存储任何内容。它全部在单独的XML或JSON文件中。我推荐JSON。 The documentation非常清楚地说明了这一点:
如果您之前使用的是基于app.config或web.config的配置,则需要将配置迁移到新格式,并更新使用应用程序容器设置配置的方式。
我们实际上花了很多时间尝试尽可能多地记录,所以虽然很多很多但尝试不要“TL; DR”它。如果你跳过,你可能最终会在“4.0之前”部分认为仍然适用于4.0的东西。它不会。听起来像your comment on this other question,你可能第一次错过了一些事情。
在快速入门部分花一些时间。该部分同时包含C#和JSON代码,展示了工作原理。再一次,很容易跳过它。
如果文档没有显示足够的示例,请查看Autofac.Configuration repo中的单元测试,尤其是the folder full of test files,其中显示了我们在测试中使用的XML和JSON格式示例。
最后......三个提示: