是的,为具有autofac的控制器设置属性注入有点棘手;)但这是它的工作原理.

使用ASP.NET Core(2.1),您首先需要在Startup.cs中将控制器注册为服务:

services.AddMvc().AddControllersAsServices();

否则财产注入将无法按照autofac docs引用:

By default, ASP.NET Core will resolve the controller parameters from the container but doesn’t actually resolve the controller from the container. This usually isn’t an issue but it does mean: […] Special wiring that you may have done during registration of the controller (like setting up property injection) won’t work.

然后,您需要通过populate向autofac容器构建器注册您的服务,然后您可以使用autofac容器注册您的控制器.

public IServiceProvider ConfigureServices(IServiceCollection services)

{

services.AddMvc().AddControllersAsServices();

var builder = new ContainerBuilder();

builder.Populate(services);

builder.RegisterType().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().PropertiesAutowired(propSelector);

为了确保您不必总是记住每个控制器类,您还可以批量注册所有控制器:

builder.Populate(services);

var propSelector = new MyPropertySelector();

builder

.RegisterAssemblyTypes(typeof(Controller).Assembly)

.AssignableTo()

.InstancePerLifetimeScope()

.PropertiesAutowired(propSelector);

希望这可以帮助 :)

core控制器属性注入的用处_asp.net-core – 如何使用Autofac和ASP.NET Core在控制器上启用属性注入?...相关推荐

  1. core部署iis的 调试net_远程调试远程 IIS 计算机上的 ASP.NET Core - Visual Studio | Microsoft Docs...

    在 Visual Studio 中远程调试远程 IIS 计算机上的 ASP.NET CoreRemote Debug ASP.NET Core on a Remote IIS Computer in ...

  2. core控制器属性注入的用处_了解ASP.NET Core 依赖注入,看这篇就够了

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  3. core控制器属性注入的用处_理解 ASP.NET Core 依赖注入

    DI在.NET Core里面被提到了一个非常重要的位置,介绍一下.NET  Core的DI实现以及对实例生命周期的管理,在控制台以及Mvc下如何使用DI,以及如何把默认的Service Contain ...

  4. 【ASP.NET Core】ASP.NET Core 依赖注入

    一.什么是依赖注入(Denpendency Injection) 这也是个老身常谈的问题,到底依赖注入是什么? 为什么要用它? 初学者特别容易对控制反转IOC(Iversion of Control) ...

  5. 全面理解 ASP.NET Core 依赖注入

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  6. ASP.NET Core Web 应用程序系列(二)- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)...

    在上一章中主要和大家分享在MVC当中如何使用ASP.NET Core内置的DI进行批量依赖注入,本章将继续和大家分享在ASP.NET Core中如何使用Autofac替换自带DI进行批量依赖注入. P ...

  7. 任务21 :了解ASP.NET Core 依赖注入,看这篇就够了

    DI在.NET Core里面被提到了一个非常重要的位置, 这篇文章主要再给大家普及一下关于依赖注入的概念,身边有工作六七年的同事还个东西搞不清楚.另外再介绍一下.NET  Core的DI实现以及对实例 ...

  8. ASP.NET Core基础知识(三)【依赖关系注入(服务)】

    在 ASP.NET Core 依赖注入 ASP.NET Core 支持依赖关系注入 (DI) 软件设计模式,这是一种在类及其依赖关系之间实现控制反转 (IoC)的技术. 有关特定于 MVC 控制器中依 ...

  9. ASP.NET Core 3.0中使用动态控制器路由

    原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...

最新文章

  1. 飞机大战html游戏全代码js、jquery操作
  2. wringPi 初始化GPIO 为上拉_你彻底弄清GPIO内部结构和各种模式了吗?
  3. 听说你想去大厂看妹子,带你看看阿里软件测试岗四轮面试是怎么样的?
  4. SQL Server 负载均衡方案集锦
  5. CF438E:The Child and Binary Tree(生成函数)
  6. redis源码之main()函数剖析
  7. Unity3D基础23:TrailRenderer特效
  8. 学校与工作(献于在校大学生及入职不久的工作者)
  9. IEnumerable和IEnumerator
  10. 改bug过程中的新发现,重新认识String trim方法
  11. arduino下载库出错_关于程序下载到最后卡住了以及自带库不能用的问题!!
  12. 小学steam计算机课程案例,STEAM教育与小学信息技术课程的融合
  13. 如何将webp格式转换成jpg?
  14. 制作QQ微信支付宝三合一收款码
  15. 点点点工程师自我提升运维方向----shell编程基础知识盘点
  16. 做站源码下载地址及各类资源站点
  17. qgc地面站如何导入离线地图_离线地图
  18. landesk 卸载_LANDesk软件分发在项目中的深入探索(续2)—客户端已安装应用程序的远程卸载...
  19. DevOps ACA 阿里云效软件测试和质量保证(八)
  20. python实现四参数七参数坐标转换

热门文章

  1. 6个必须掌握的基础配置 - [webpack第一篇]
  2. Alamofire4.x开源代码分析(三)文件上传下载
  3. 用JavaScript实现网页无限轮播图效果,附整套源码
  4. jstat分析JVM内存
  5. 安卓3D游戏-神奇宝贝防御战
  6. VirtualBox 安装 Ubuntu 14.10 花屏 解决方案
  7. zentaoPHP学习
  8. .net MVC在服务端代码输出html字符串
  9. 仿58网,赶集网,百姓网swfupload图片上传效果(asp.net 2.0)
  10. 未来的GDI:WPF技术纵览[zz]