[英]Problem with Circular dependency in ASP.NET Core
I have to create services for my project, that implement other services, therefore I created many Interfaces and for some services I inject the interface to use the methods, but when I tried to compile my project I become an error, this is driving me nuts, can someone please tell me what am I doing wrong?我必须为我的项目创建服务,实现其他服务,因此我创建了许多接口,对于一些服务,我注入接口以使用这些方法,但是当我尝试编译我的项目时出现错误,这让我发疯,有人可以告诉我我做错了什么吗?
the interface:界面:
public interface IGoogleExtensions
{
dynamic GetEntetiesTypeorWorth(WebhookRequest request, string entetie, bool wertHohlen);
bool HasDisplay(WebhookRequest request);
string StringBuilder(int position, string text, string texttoinsert);
}
The Service服务
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();
}
References in Start.up 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>();
I´m dealing with the following error:我正在处理以下错误:
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)
Edit编辑
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;
}
Your GoogleExtensionsService
uses GoogleVitalwertResponseService
which uses GoogleExtensionsService
, etc, etc. Your concrete implementations cannot have circular dependencies.您的GoogleExtensionsService
使用GoogleVitalwertResponseService
,它使用GoogleExtensionsService
等。您的具体实现不能有循环依赖。
It looks like GoogleExtensionsService
gets GoogleVitalwertResponseService
injected, but doesn't actually use it.看起来GoogleExtensionsService
注入了GoogleVitalwertResponseService
,但实际上并没有使用它。 Remove that reference from the GoogleExtensionsService
and you should be set.从GoogleExtensionsService
中删除该引用,您应该已设置好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.