У меня есть следующий класс:
public class RestRepository<TDbRecord> : IRepository<TDbRecord> where TDbRecord : class
{
#region Fields
private readonly HttpClient _httpClient;
#endregion
#region ctor
public RestRepository(HttpClient httpClient)
{
_httpClient = httpClient;
}
#endregion
...
}
В интерфейсе есть несколько действий, которые необходимо выполнить с помощью HTTP-запросов (Get, GetSpecifi c Post, Post List…).
В сервисе запуска я настраиваю некоторые HttpClient с разными базовыми адресами, например:
services.AddHttpClient<IRepository<TDbRecordClassA>>(client => client.BaseAddress = new Uri(baseAddress, "api/ClassA"));
services.AddHttpClient<IRepository<TDbRecordClassB>>(client => client.BaseAddress = new Uri(baseAddress, "api/ClassB"));
services.AddHttpClient<IRepository<TDbRecordClassC>>(client => client.BaseAddress = new Uri(baseAddress, "api/ClassC"));
services.AddHttpClient<IRepository<TDbRecordClassD>>(client => client.BaseAddress = new Uri(baseAddress, "api/ClassD"));
Ранее я определял их как одиночные, конструировал классы при запуске и вставлял их другим классы:
public ClassDActionsHandler(<IRepository<TDbRecordClassD>)…
Однако теперь использование AddHttpClient()
без конструирования класса во время запуска дает мне следующее исключение при попытке ввести класс:
Исключение при запуске приложения System.Exception: Не удалось разрешить службу типа 'xyIClassDActionsHandler' для параметра 'ClassDActionsHandler' метода 'Configure' для типа 'x.Startup'. ---> System.InvalidOperationException: подходящий конструктор для типа 'x.DAL.IRepository 1[x.y.z.x.y.z.TDbRecordClassD]' could not be located. Ensure the type is concrete and services are registered for all parameters of a public constructor.
at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.FindApplicableConstructor(Type instanceType, Type[] argumentTypes, ConstructorInfo& matchingConstructor, Nullable
1 [] & parameterMap) в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateFactory (Type instanceType, Type [] argumentsTypes) в Microsoft. Extensions.Http.DefaultTypedHttpClientFactory 1.Cache.<>c.<.cctor>b__7_0()
at System.Threading.LazyInitializer.EnsureInitializedCore[T](T& target, Boolean& initialized, Object& syncLock, Func
1 valueFactory) в Майкрософт , Аргумент TArgument) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitTransient (область действия TransientCallSite transientCallSite, ServiceProviderEngineScope) в объекте Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteSiteSiteSiteSiteSiteSiteSiteVite .DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (ScopedCallSite scoped CallSite, область ServiceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton (SingletonCallSite singletonCallSite, ServiceProviderEngineScope) в Майкрософт Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped (scopedCallSite scopedCallSite, ServiceProviderEngineScope сфера) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitSingleton (SingletonCallSite singletonCallSite, ServiceProviderEngineScope охват) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor`2.VisitCallSite ( IServiceCallSite callSite, аргумент TArgument) в Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve (IServiceCallSite callSite, ServiceProviderEngineScope) в Microsoft.Extensions.Depende ncyInjection.ServiceLookup.DynamicServiceProviderEngine. <> c__DisplayClass1_0.b__0 (ServiceProviderEngineScope сфера) в Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService (тип ServiceType, ServiceProviderEngineScope serviceProviderEngineScope) в Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope.GetService (тип ServiceType) в Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService (поставщик IServiceProvider, Тип serviceType) в Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke (экземпляр объекта, построитель IApplicationBuilder) - конец трассировки внутреннего исключения .AspNetCore.Hosting.Internal.ConfigureBuilder.Invoke (Экземпляр объекта, построитель IApplicationBuilder) в Microsoft.AspNetCore.Hosting.Internal.ConfigureBuilder. <> C__DisplayClass4_0.b__0 (построитель IApplicationBuilder) в Microsoft.Ast. Настроить (приложение IApplicationBuilder) в Microsoft.AspNetCore. Mvc .Internal.MiddlewareFilterBuilderStartupFilter. <> C__DisplayClass0_0.g__MiddlewareFilterBuilder | 0 (IApplicationBuilder builder) в Microsoft.AspNetCil0. Hosting.Internal.AutoRequestServicesStartupFilter. <> C__DisplayClass0_0.b__0 (построитель IApplicationBuilder) в Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication ()