当前位置: 首页 > news >正文

四川城乡和住房建设厅网站野望原文及翻译

四川城乡和住房建设厅网站,野望原文及翻译,沧州企业网站专业定制,网站设计策划书方案原文作者: Thomas Levesque 原文链接#xff1a;https://thomaslevesque.com/2020/03/18/lazily-resolving-services-to-fix-circular-dependencies-in-net-core/循环依赖的问题在构建应用程序时#xff0c;良好的设计应该应避免服务之间的循环依赖, 循环依赖是指某些组件直接… 原文作者: Thomas Levesque 原文链接https://thomaslevesque.com/2020/03/18/lazily-resolving-services-to-fix-circular-dependencies-in-net-core/循环依赖的问题在构建应用程序时良好的设计应该应避免服务之间的循环依赖, 循环依赖是指某些组件直接或间接相互依赖比如下面这样如果您不小心在.NET Core应用程序使用了依赖项注入并且引入了以下循环依赖关系你要知道的是项目启动会报一个循环依赖的错误因为依赖关系周期中涉及的组件的解析将失败比如你具有以下组件•A服务它实现了接口IA并取决于IB•B服务它实现了接口IB并取决于IC•C服务它实现了接口IC并取决于IASystem.InvalidOperationException: A circular dependency was detected for the service of type Demo.IA.所以应该去避免这些设计。注入 IServiceProvider但是当实际应用程序达到一定程度的复杂性时有时可能很难避免有一天不小心给服务添加了一个依赖项启动报错了事情突然浮出水面 因此您面临一个选择重构来解决循环依赖的问题理想情况下应该去选择重构但是实际情况中可能项目比较紧可能没有时间重构代码因为要做完整的回归测试。一种方法是将注入 IServiceProvider 到您的类中并services.GetRequiredService()在需要使用时使用T,例如C我前面提到的类,最初可能看起来像这样class C : IC {private readonly IA _a;public C(IA a){_a a;}public void Bar(){..._a.Foo()...} } 为了避免依赖性循环可以注入 IServiceProvider, 然后这样重写它class C : IC {private readonly IServiceProvider _services;public C(IServiceProvider services){_services services;}public void Bar(){...var a _services.GetRequiredServiceIA();a.Foo();...} } 由于在构建IA时不再需要解决问题C因此中断了循环至少在构建过程中并解决了问题但是我不太喜欢这种方法因为这样强制依赖了IOC如果我使用了 Autofac 等另一个问题是我很难看到类的依赖关系它不明显。巧用 LazyT下边的方法我利用了Lazy类需要添加一个 IServiceCollection 的扩展新建一个静态类public static IServiceCollection AddLazyResolution(this IServiceCollection services) {return services.AddTransient(typeof(Lazy),typeof(LazilyResolved)); }private class LazilyResolvedT : LazyT {public LazilyResolved(IServiceProvider serviceProvider): base(serviceProvider.GetRequiredServiceT){} } 然后再 Startup.cs 中的 ConfigureServices 方法中这样写services.AddLazyResolution(); 在依赖的类中IA注入Lazy当您需要使用时IA只需访问lazy的值 Value 即可class C : IC {private readonly LazyIA _a;public C(LazyIA a){_a a;}public void Bar(){..._a.Value.Foo();...} } 注意不要访问构造函数中的值保存Lazy即可 在构造函数中访问该值这将导致我们试图解决的相同问题。这个解决方案不是完美的但是它解决了最初的问题却没有太多麻烦并且依赖项仍然在构造函数中明确声明我可以看到类之间的依赖关系。最后欢迎扫码关注我们的公众号 【全球技术精选】专注国外优秀博客的翻译和开源项目分享也可以添加QQ群 897216102
http://www.zqtcl.cn/news/821748/

相关文章:

  • 凡科 360免费建站培训网页制作机构
  • 做网站用什么后缀好法人变更在哪个网站做公示
  • 公司建一个网站多少钱戴尔公司网站建设
  • 可以做试卷网站数学试卷小学六白沟网站开发
  • 宁波个人网站建设好看的网站在哪里好找
  • 宜春做网站公司wordpress 朋友圈插件
  • 做特价网站ckplayer wordpress
  • 网站运营需要服务器吗在哪个网站做图片视频带音乐
  • 大连网站备案高品质网站建设公司
  • 建站模板哪个好网站添加子域名
  • html5创意网站创建网站公司好
  • php网站开发外文旅游电子商务网站的品牌建设
  • 陕西西安网站建设公司哪家好网页框架是什么
  • 广东网站建设效果安福网站建设
  • 如何将html发布到网站微帮网免费发布信息网
  • 做个网站西安专业网络推广公司
  • 建设网站cms网站开发后台需要自己写吗
  • 天津协会网站建设学计算机的做网站的叫什么工作
  • 商城网站建设缺点淘宝店铺怎么免费推广
  • 利于优化的网站模板360建筑网密码忘了
  • 商务网站建设找哪家网页设计商品页面制作
  • 连云港网站建设方案大型门户网站多少钱
  • win7 iis设置网站首页网站建设攵金手指科杰壹陆
  • 阿里巴巴网站建设的功能定位手机在线制作图片加字
  • 网站联系我们的地图怎么做的电子商务网站建设完整案例教程
  • 北京学习网站建设湖北省建设厅政务公开网站
  • 推广做网站联系方式贵州省领导班子名单一览表
  • 厦门的网站建设公司徐州城乡建设局网站
  • 天津圣辉友联网站建设南昌本地生活网站有哪些
  • 境外社交网站上做推广上海网站建设的价格低