c# - 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
which usesGoogleExtensionsService
等。您的具体实现不能具有循环依赖关系。
它看起来像GoogleExtensionsService
被GoogleVitalwertResponseService
注入,但实际上并没有使用它。从 中删除该引用GoogleExtensionsService
,您应该被设置。
推荐阅读
- sql - 错误:数字类型的输入语法无效:“”
- python - 使用 pem 密钥和客户端证书的 KAFKA SSL 连接
- java - 当用户停止在 Java TextArea 中输入时如何在另一个线程中保存和拼写检查
- sql - 每日入住查询
- xml - 查找具有最大值的 xml 元素属性会导致解析错误
- java - 如何使用 Apache Camel 和 MongoDB 创建动态 equals 查询?
- python - Python按列名只读特定列excel表
- sql-server - 快餐销售点系统数据库问题
- go - Golang BigQuery - 处理包含重复字段的行并将它们切片
- windows - 如何使用 FFmpeg 和 GeForce 硬件将 4K MKV 电影解码和编码为 1080p