Почему Ламар не вводит тип IServiceScopeFactory в ASP.NET Core?
Я пытаюсь реализовать проверку работоспособности в проекте aspnetcore2.2, который подтверждает, что моя конфигурация контейнера Lamar действительна через IContainer.AssertConfigurationIsValid
(по сути, он может построить все зависимости).
Несколько услуг (вне моего контроля) зависят от случая Microsoft.Extensions.DependencyInjection.IServiceScopeFactory
, Ламар не может внедрить ни одну из этих зависимостей, что затем не подтверждает утверждение, когда эти службы не могут быть построены.
Стек является приложением ASP.NET Core 2.2, использующим Lamar в качестве платформы IoC по умолчанию (с помощью рекомендуемого .UseLamar()
метод расширения) и все остальное работает нормально.
Любой взять на инъекцию ServiceScopeFactory
(где угодно) терпит неудачу с
System.InvalidOperationException: Frame type Lamar.IoC.Resolvers.CastRootScopeFrame does not implement IResolverFrame
at Lamar.IoC.Instances.FuncResolverDefinition.BuildResolver()
at Lamar.IoC.Instances.GeneratedInstance.BuildFuncResolver(Scope scope)
at Lamar.IoC.Instances.GeneratedInstance.buildResolver(Scope scope)
at Lamar.IoC.Instances.GeneratedInstance.ToResolver(Scope topScope)
at Lamar.IoC.Instances.ConstructorInstance.ToResolver(Scope topScope)
at Lamar.ServiceGraph.FindResolver(Type serviceType)
at Lamar.IoC.Scope.TryGetInstance(Type serviceType)
at Lamar.IoC.Scope.GetService(Type serviceType)
(...)
Почему эта конкретная зависимость не может быть введена с Ламаром?
0 ответов
Я столкнулся с той же проблемой, я обнаружил, что IServiceScopeFactory
в моем случае используется при управлении HangFireSession. Так меняетсяIServiceScopeFactory
к IServiceProvider
и создание области видимости устранило мою проблему.
Решение 1: IServiceScopeFactory
а также IServiceProvider
совершенно такие же.
Это поведение CreateScope из IServiceProvider
, это просто обернуть IServiceScopeFactory
.
public static IServiceScope CreateScope(this IServiceProvider provider)
{
return provider.GetRequiredService<IServiceScopeFactory>().CreateScope();
}
PR представлен с воспроизведением ошибки https://github.com/JasperFx/lamar/pull/228
Решение 2: введитеFunc<IServiceScopeFactory>
вместо того IServiceScopeFactory