如何解决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 举报,一经查实,本站将立刻删除。