asp.net-core – 如何使用Autofac和ASP.NET Core在控制器上启用
似乎没有一种简单的方法可以确保控制器具有属性注入.
解决这个问题的方法是单独注册所有控制器,这似乎有点失败了. [FromServices]属性是removed,他们特别提到它应该取决于各个IoC容器以确保发生这种情况. 我错过了一些明显的东西吗?查找所有可用的扩展方法,但没有找到任何内容,相同的问题和讨论论坛. 解决方法
是的,为具有autofac的控制器设置属性注入有点棘手;)但这是它的工作原理.
使用ASP.NET Core(2.1),您首先需要在Startup.cs中将控制器注册为服务: services.AddMvc().AddControllersAsServices(); 否则财产注入将无法按照autofac docs引用:
然后,您需要通过populate向autofac容器构建器注册您的服务,然后您可以使用autofac容器注册您的控制器. 以下是autofac docs的缩短代码摘录: public IServiceProvider ConfigureServices(IServiceCollection services) { services.AddMvc().AddControllersAsServices(); var builder = new ContainerBuilder(); builder.Populate(services); builder.RegisterType<MyController>().PropertiesAutowired(); this.ApplicationContainer = builder.Build(); return new AutofacServiceProvider(this.ApplicationContainer); } 附加.PropertiesAutowired()以允许属性注入非常重要! 现在另一件可能不明显的事情是,autofac的PropertiesAutowired并不会自动将服务的每个属性都视为属性注入的worty. 检查github source code中的DefaultPropertySelector,您将看到它将跳过非公开的: if (!propertyInfo.CanWrite || propertyInfo.SetMethod?.IsPublic != true) { return false; } 因此,您可能需要创建一个自定义PropertySelector,它扩展DefaultPropertySelector,以便根据您自己的逻辑将属性注册为可注入的.所以你可以这样做: var propSelector = new MyPropertySelector(); builder.RegisterType<MyController>().PropertiesAutowired(propSelector); 为了确保您不必总是记住每个控制器类,您还可以批量注册所有控制器: builder.Populate(services); var propSelector = new MyPropertySelector(); builder .RegisterAssemblyTypes(typeof(Controller).Assembly) .AssignableTo<Controller>() .InstancePerLifetimeScope() .PropertiesAutowired(propSelector); 希望这可以帮助 :) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- .NET Core MVC RequestLocalization忽略DefaultRequestCult
- ASP.NET Web API官网学习地址-让知识更全面
- asp.net-mvc – 如何为其模型调用“null”的局部视图?
- asp.net-mvc – 无法在Global.asax上加载类型MvcApplicatio
- asp.net-mvc – 我可以从MVC中的View访问Resources文件吗?
- asp.net-mvc – 404 Asp.Net中的Http错误处理程序MVC(RC 5)
- 在ASP.NET Identity 2.0.0-beta1中禁用双因素身份验证
- asp.net – 在自定义声明中保留用户安全配置文件数据
- 将ASP.NET updatepanel与jQuery UI DatePicker结合使用时出
- asp.net-mvc – MVC组件GUI方法
- asp.net-web-api – 在WebApi OData中为OData服务
- asp.net – ReportViewer – 隐藏PDF导出
- .net – 程序集Z中类型Y的方法X没有实现
- asp.net-mvc – 对于MVC,REST是强制性的吗?
- asp.net-mvc – ASP.NET MVC Action被调用两次
- 在ASP.Net网站项目中混合VB.Net和C#代码?
- asp.net-mvc – DAL – > BLL < - GUI组合根.如何
- asp.net – 当数据绑定控件被绑定两次时,如何避免
- ASP.NET NHibernate事务持续时间
- asp.net-mvc – 无法添加MVC控制器VS2012给出“对