架构师_程序员

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 237|回复: 1

[资料] Autofac "Circular component dependency detected" 错误解决

[复制链接]
发表于 2019-11-19 11:10:28
zu
DependencyResolutionException: Circular component dependency detected: Dolphin.WebUI.Controllers.HomeController -> Dolphin.Service.AccountService -> Dolphin.Service.OrderService -> Dolphin.Service.OrderService.

QQ截图20191119110918.jpg

错误场景:使用 Autofac IOC框架  PropertiesAutowired 属性注入,造成此错误代码原因是两种类型互相引用导致,所以我们在用 Autofac 进行属性注入时务必将行为设置为允许循环依赖项。代码如下

  1.     /// <summary>
  2.     /// 用户相关服务
  3.     /// </summary>
  4.     public class UserService
  5.     {
  6.         public OrderService OrderService { get; set; }
  7.     }

  8.     /// <summary>
  9.     /// 订单相关服务
  10.     /// </summary>
  11.     public class OrderService
  12.     {
  13.         public UserService UserService { get; set; }
  14.     }



  15. var builder = new ContainerBuilder();

  16. // 属性注入务必将行为设置为允许循环依赖项
  17. builder.RegisterType<UserService>()
  18.     .InstancePerLifetimeScope()
  19.     .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);

  20. builder.RegisterType<OrderService>()
  21.     .InstancePerLifetimeScope()
  22.     .PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
复制代码



就是加这个  PropertyWiringOptions.AllowCircularDependencies 就可以解决这个错误哦




上一篇:docker container 容器访问外部宿主机服务
下一篇:特意花钱注册,结果要下的资源根本是骗人的
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2019-11-20 10:43:12
  1. builder.RegisterType<AccountService>().EnableClassInterceptors().InterceptedBy(typeof(AopService)).As<IAccountService>().InstancePerLifetimeScope().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies); //这样就不用加 AsImplementedInterfaces 了
  2.             builder.RegisterType<OrderService>().EnableClassInterceptors().InterceptedBy(typeof(AopService)).AsImplementedInterfaces().InstancePerLifetimeScope().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
  3.             builder.RegisterType<UserInfoService>().EnableClassInterceptors().InterceptedBy(typeof(AopService)).AsImplementedInterfaces().InstancePerLifetimeScope().PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);
复制代码


AsImplementedInterfaces()  是以接口方式进行注入,注入这些类的所有的公共接口作为服务(除了释放资源)

A:IA

builder.RegisterType<A>().AsImplementedInterfaces();  使用时用IA,会返回一个A的实例,即将自身的实例进行注入
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|Archiver|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2020-1-18 13:08

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表