簡體   English   中英

ASP.NET 核心中的循環依賴問題

[英]Problem with Circular dependency in 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, string entetie, 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 text, 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, 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中刪除該引用,您應該已設置好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM