(接口)检测到类型服务的循环依赖关系

编程入门 行业动态 更新时间:2024-10-28 16:26:47
本文介绍了(接口)检测到类型服务的循环依赖关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我有2个界面:

public interface IPedidoService { UsuarioDrogueria CUsuarioDrogueria(string userId, int idDrogueria); List<PedidoComboProducto> CPedidosCombosProductos(int idcombo, int idPedido); } public interface IEmailService { void SendEmailAttachment(string email, string subject, string archive); void SendNotificationEmail(List<Pedido> pedidos, string email, Drogueria drog); void SendNotificationEmailADM(Pedido pedido) ; }

我想使用 IPedidoService 中的 IEmailService 中的函数,因此在创建存储库时将其注入其构造函数中.

I want to use the functions from IEmailService inside IPedidoService, so I inject it in its constructor when I create the respository.

public class PedidoService : IPedidoService { private readonly IEmailService emailService; public PedidoService(IEmailService e) { this.emailService = e; } }

到目前为止,一切正常,但是当我尝试反转角色时( IEmailService 中的 IPedidoService 函数):

Up until here everything works fine, but when I try to do reverse the roles (IPedidoService functions inside IEmailService):

public class EmailService : IEmailService { private readonly IPedidoService pedidoSettings; public EmailService(IPedidoService p) { this.pedidoSettings = p; } }

我最终收到此异常:

System.InvalidOperationException: A circular dependency was detected for the service of type 'EnvioPedidos.Data.Abstract.IPedidoService'. EnvioPedidos.Data.Abstract.IPedidoService(EnvioPedidos.PedidoService) -> EnvioPedidos.Data.Abstract.IEmailService(EnvioPedidos.EmailService) -> EnvioPedidos.Data.Abstract.IPedidoService

有人可以帮我在这里找到问题吗?

Can anybody help me trace the issue here?

推荐答案

一种简单的方法是使用基于此博客:

A simple way is to use Lazy<T> class which is based on this blog:

自定义扩展方式:

public static class LazyResolutionMiddlewareExtensions { public static IServiceCollection AddLazyResolution(this IServiceCollection services) { return services.AddTransient( typeof(Lazy<>), typeof(LazilyResolved<>)); } } public class LazilyResolved<T> : Lazy<T> { public LazilyResolved(IServiceProvider serviceProvider) : base(serviceProvider.GetRequiredService<T>) { } }

在Startup.cs中配置:

Configure in Startup.cs:

public void ConfigureServices(IServiceCollection services) { //services.AddSingleton<IPedidoService, PedidoService>(); //services.AddSingleton<IEmailService, EmailService>(); services.AddLazyResolution(); }

更改您的农具类:

public class PedidoService : IPedidoService { private readonly Lazy<IEmailService> emailService; public PedidoService(Lazy<IEmailService> e) { this.emailService = e; } //... } public class EmailService : IEmailService { private readonly Lazy<IPedidoService> pedidoSettings; public EmailService(Lazy<IPedidoService> p) { this.pedidoSettings = p; } //... }

更多推荐

(接口)检测到类型服务的循环依赖关系

本文发布于:2023-10-30 21:55:04,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1544114.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:检测到   接口   类型   关系

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!