微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ASP.NET Core 中的循环依赖问题

如何解决ASP.NET Core 中的循环依赖问题

我必须为我的项目创建服务来实现其他服务,因此我创建了许多接口,并为某些服务注入了接口以使用这些方法,但是当我尝试编译我的项目时出现错误,这是快把我逼疯了,有人能告诉我我做错了什么吗?

界面:

   public interface IGoogleExtensions
   {
      dynamic GetEntetiesTypeorWorth(WebhookRequest request,string entetie,bool wertHohlen);
      bool Hasdisplay(WebhookRequest request);
      string StringBuilder(int position,string text,string texttoinsert);

   }

服务

  public class GoogleExtensionsService : IGoogleExtensions

  {
      private readonly IGoogleVitalwertResponseHelper _googleVitalwertResponseHelper;

  public GoogleExtensionsService(IGoogleVitalwertResponseHelper googleVitalwertResponseHelper)
  {
     _googleVitalwertResponseHelper = googleVitalwertResponseHelper;
  }

  public dynamic GetEntetiesTypeorWorth(WebhookRequest request,bool wertHohlen)
  {
     var entetieType = request.QueryResult.Parameters.Fields;
     var type = TextResponses.FehlerMeldung2;
    [...]
        type = TextResponses.Alle;
     }
     return type;
  }

  public bool Hasdisplay(WebhookRequest request)
  {
     string capability = request.OriginalDetectIntentRequest.Payload.Fields[ProtobufFields.Surface].StructValue.Fields[ProtobufFields.Capabilities].ToString();
     if (capability.Contains(ProtobufFields.Screen_output))
        return true;
     return false;
  }

  public string StringBuilder(int position,string texttoinsert)
  {
     StringBuilder sb = new StringBuilder(text);
     sb.Insert(position,texttoinsert);
     return sb.ToString();
  }

Start.up 中的参考

     services.AddTransient<IGoogleResponseService,GoogleResponseService>();
     services.AddTransient<IGoogleService,GoogleRequestService>();
     services.AddTransient<IGoogleExtensions,GoogleExtensionsService>();
     services.AddTransient<IGoogleVitalwertResponseHelper,GoogleVitalwertResponseService>();
     services.AddTransient<IGoogleVitalwertRequest,GoogleVitalwertRequest>();
     services.AddTransient<IGoogleMenuePlanRequest,GoogleMenuePlanRequestService>();
     services.AddTransient<IGoogleMenuePlanResponseHelper,GoogleMenuePlanResponseService>();
     services.AddTransient<IGoogleMedikamentRequest,GoogleMedikamentRequestService>();
     services.AddTransient<IGoogleMedikamentResponse,GoogleMedikamentResponseService>();
     services.AddTransient<IGoogleBerichtResponse,GoogleBerichResponseService>();

我正在处理以下错误

Host terminated unexpectedly
System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: XXX.Microservices.Xxx.Api.Contract.Services.IGoogleService Lifetime: Transient ImplementationType: XXX.Microservices.Xxx.Api.Services.GoogleRequestService': A circular dependency was detected for the service of type 'XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions'.
XXX.Microservices.Xxx.Api.Contract.Services.IGoogleService(XXX.Microservices.Xxx.Api.Services.GoogleRequestService) -> XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions(XXX.Microservices.Xxx.Api.Services.GoogleExtensionsService) -> XXX.Microservices.Xxx.Api.Contract.Services.IGoogleVitalwertResponseHelper(XXX.Microservices.Xxx.Api.Services.GoogleVitalwertResponseService) -> XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions) (Error while validating the service descriptor 'ServiceType: XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions Lifetime: Transient ImplementationType: XXX.Microservices.Xxx.Api.Services.GoogleExtensionsService': A circular dependency was detected for the service of type 'XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions'.
XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions(XXX.Microservices.Xxx.Api.Services.GoogleExtensionsService) -> XXX.Microservices.Xxx.Api.Contract.Services.IGoogleVitalwertResponseHelper(XXX.Microservices.Xxx.Api.Services.GoogleVitalwertResponseService) -> XXX.Microservices.Xxx.Api.Contract.Services.IGoogleExtensions)

编辑

public class GoogleVitalwertResponseService : IGoogleVitalwertResponseHelper
   {
      private readonly IGoogleResponseService _googleResponseService;
      private readonly IGoogleExtensions _googleExtensions;
      private readonly IGoogleVitalwertResponseHelper _googleVitalwertResponseHelper;

      public GoogleVitalwertResponseService(IGoogleResponseService googleResponseService,IGoogleExtensions googleExtensions,IGoogleVitalwertResponseHelper googleVitalwertResponseHelper)
      {
         _googleResponseService = googleResponseService;
         _googleExtensions = googleExtensions;
         _googleVitalwertResponseHelper = googleVitalwertResponseHelper;
      }

      public WebhookResponse VitalwertListResponse(WebhookRequest request,List<VitalwertOutput> vitalList,string vitalwertReference)
      {
         var session = new List<int>();
         var items = new List<Value>();
         int counter = 0;
         ...
      }

      public WebhookResponse VitalwertUebersicht(WebhookRequest request,ICollection<VitalwertOutput> vitalList,ICollection<VitalwertKategorie> DeFinitionen)
      {
         var items = new List<Value>();
         ....
         return _googleResponseService.BuildListResponse(request,items,"Ich habe " + items.Count + " Vitalwerte gefunden",3,SessionNames.SessionVitalwertUebersicht,session,null,null);
      }

      public string GetAktuellTag(string tag,DayOfWeek dayname)
      {
         DateTime today = DateTime.Parse(tag);
         ...
      }

      public List<keyvaluePair<string,int>> GenerateImageLinks()
      {
         var list = new List<keyvaluePair<string,int>>();
         list.Add(new keyvaluePair<string,int>(ImagesURLS.Stethoscope,1));
         return list;
      }

      public string GenerateLink(List<keyvaluePair<string,int>> list,int DeFinitionId)
     ...
         var sub = vitalart.Substring(1,vitalart.Length - 2);
         return sub;
      }

解决方法

您的 GoogleExtensionsService 使用 GoogleVitalwertResponseService 使用 GoogleExtensionsService 等。您的具体实现不能有循环依赖。

看起来 GoogleExtensionsService 被注入了 GoogleVitalwertResponseService,但实际上并没有使用它。从 GoogleExtensionsService 中删除该引用,您应该已设置。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。