ASP.NET核心中存在循环依赖关系问题



我必须为我的项目创建实现其他服务的服务,因此我创建了许多接口,对于一些服务,我注入了接口来使用方法,但当我试图编译我的项目时,我出现了一个错误,这让我抓狂,有人能告诉我我做错了什么吗?

接口:

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中删除该引用,就应该设置它。