Почему Ламар не вводит тип 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

Другие вопросы по тегам