C# 不允许循环依赖项

C# 不允许循环依赖项,c#,asp.net-core,C#,Asp.net Core,我的解决方案中有两个项目:核心和基础架构。在核心我有我的服务,在基础设施我有信号。我需要以某种方式从Signal和Signal-from-Services访问我的服务 对于ChatHub,在新消息中,我将调用服务在DB中添加新条目。 若订单已更新,我将调用OrderHub将事件发送回客户端。 第二种情况更清楚:我正在使用Stripe,监听服务内部的stripewebhook,并在客户处于订单页面时向客户发送关于订单的更新 如何在不造成循环依赖的情况下实现这一点 感谢最常用的方法是添加一个额外的抽

我的解决方案中有两个项目:核心和基础架构。在核心我有我的服务,在基础设施我有信号。我需要以某种方式从Signal和Signal-from-Services访问我的服务

对于ChatHub,在新消息中,我将调用服务在DB中添加新条目。 若订单已更新,我将调用OrderHub将事件发送回客户端。 第二种情况更清楚:我正在使用Stripe,监听服务内部的stripewebhook,并在客户处于订单页面时向客户发送关于订单的更新

如何在不造成循环依赖的情况下实现这一点


感谢

最常用的方法是添加一个额外的抽象层,让类为每个服务使用接口

现在,对于您问题中的信号器部分,我想到的第一件事是在您的服务上定义一个事件,并在集线器上订阅它。
通过这种方式,您可以将服务与中心解耦,因为服务不需要了解中心,只需触发事件。

您可以将构造函数添加到问题中循环依赖项的位置吗?你在使用依赖注入吗?如果有的话,您使用的是哪一个?@garethb我正在使用构造函数注入我正在使用DI容器服务定位器来获取对依赖项的引用,而不是使用构造函数来注入依赖项。对于.NETCore这样的东西,谢谢你的回答!我试着用事件来做,但遇到了麻烦。我正在使用构造函数注入,当我调试时,我看到它添加了监听器,当从服务调用事件时,它为null。有什么想法吗?每个物体的寿命是多少?嗯,它们的范围听起来像是问题所在。如果你想订阅这种类型的服务,我相信你希望将服务作为一个单独的项目,我最终做的是将服务接口移动到一个单独的项目中,并在需要的地方在中心使用它们,并在我的服务中注入IHubContext,在那里我需要将事件发送到Signal客户端。Event和Singleton的问题是,如果不在集线器中使用create scope初始化Db,我就无法使用该服务,这使得每次发送的事件增加了一倍。我对我的最终方法感到更为满意,但我想再次感谢你,因为你为我指明了我没有想到的新方向: