ApiController上的Autofac注入属性与RegisterApiControllers结合使用

时间:2017-07-24 10:28:48

标签: c# asp.net-web-api autofac autofac-configuration

我想将Modules文件中的Dataautofac.json属性注入名称为ApiController的{​​{1}}

我读了这个页面: http://docs.autofac.org/en/latest/configuration/xml.html但我的属性仍然是DataController,所以我一定做错了。谁能帮帮我?

我的NULL已经有一个构造Controller的构造函数,因此这些属性是额外的。

这是我现在的ILog配置:

Autofac

这是我的var builder = new ContainerBuilder(); builder.RegisterApiControllers(typeof(Startup).Assembly); // to register all ApiControllers at once // Use the Microsoft Configuration Extensions together with Autofac to create an Autofac Module var autofacConfig = new ConfigurationBuilder(); autofacConfig.AddJsonFile("autofac.json"); var autofacModule = new ConfigurationModule(autofacConfig.Build()); builder.RegisterModule(autofacModule); var container = builder.Build(); var httpConfigurationConfig = new HttpConfiguration { DependencyResolver = new AutofacWebApiDependencyResolver(container) }; app.UseAutofacMiddleware(container); app.UseAutofacWebApi(httpConfigurationConfig ); app.UseWebApi(httpConfigurationConfig );

autofac.json

我的{ "components": [ { "type": "Web.Controllers.DataController, Web", "injectProperties": true, "properties": { "Modules": { "Module1": "http://localhost:12345/", "Module2": "http://localhost:12346/" }, "Data": { "Item1": "Declarations", "Item2": "Payments" } } } ] } 看起来像这样:

Controller

2 个答案:

答案 0 :(得分:0)

我看不到你在WebApi管道中插入容器的位置了吗?

config.DependencyResolver = new AutofacWebApiDependencyResolver(container);

此外,当您想要属性注入时,您需要使用方法PropertiesAutowired()

builder.RegisterApiControllers(typeof(Startup).Assembly).PropertiesAutowired();

答案 1 :(得分:0)

您提供的代码似乎没问题 - 我复制了它并且工作正常。

你必须记住在创建组件之后注入了属性,所以在你的控制器构造函数中这些属性是null,但是当你点击控制器方法时,它们会被正确填充您在json配置文件中提供的数据。