【问题标题】:MediatR instanciate command handlerMediatR 实例化命令处理程序
【发布时间】:2021-08-24 23:57:25
【问题描述】:

我不知道是否有人遇到过这个问题。 我正在尝试实例化一个类并收到此错误。

“无法从根目录解析范围服务‘System.IServiceProvider’ 提供者。”

我什至从 MediatR 下载源代码进行调试并尝试了解问题,但我没有找到任何解决方案。 任何帮助将不胜感激,因为我被困在 SO 或 Google 上找不到任何解决方案 这是类的声明

public class UserAditionalDataHandler
    : BaseDbContextRequestHandler<UserAditionalDataCommand,
        UserAditionalDataAdded, SecuritySupportDbContext> 
{ 
    public UserAditionalDataHandler(
        IJsonStringLocalizer stringLocalizer, 
        ILogger logger,
        IMapper mapper,
        IMediator mediator, 
        IDatabaseContextProviderFactory databaseFactory)
    : base(
        stringLocalizer,
        logger,
        mapper,
        mediator,
        databaseFactory) { } 
}

基类继承自IRequestHandler&lt;TReq, TRes&gt;

这是注册:

public static IServiceCollection AddServiceMediatR(
    this IServiceCollection services,
    Func<IEnumerable<Assembly>> InjectAssemblies,
    Func<IServiceCollection, IServiceCollection>
        InjectMediatRDecorators)
{
    var assemblies = InjectAssemblies()
        .Where(x => x.FullName.Contains(
            "CommandsHandlers",
            StringComparison.OrdinalIgnoreCase))
        .ToArray();

    if (assemblies.Length > 0)
    {
        services.AddMediatR(
            options => options.AsScoped(), assemblies);
        InjectMediatRDecorators(services);
    }

    return services;
}

这是异常的完整堆栈跟踪。

at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteValidator.ValidateResolution(Type serviceType, IServiceScope scope, IServiceScope rootScope)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.Microsoft.Extensions.DependencyInjection.ServiceLookup.IServiceProviderEngineCallback.OnResolve(Type serviceType, IServiceScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngine.GetService(Type serviceType, ServiceProviderEngineScope serviceProviderEngineScope)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.Options.OptionsBuilder1.<>c__DisplayClass9_01.<Configure>b__0(IServiceProvider sp)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitIEnumerable(IEnumerableCallSite enumerableCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitNoCache(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.ResolveService(ServiceCallSite callSite, RuntimeResolverContext context, RuntimeResolverLock lockType, ServiceProviderEngineScope serviceProviderEngine)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.b__0(ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c.b__12_2(IServiceProvider sp)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.ResolveService(ServiceCallSite callSite, RuntimeResolverContext context, RuntimeResolverLock lockType, ServiceProviderEngineScope serviceProviderEngine)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitRootCache(ServiceCallSite callSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.<>c.<AddAutoMapperClasses>b__12_3(IServiceProvider sp)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitDisposeCache(ServiceCallSite transientCallSite, RuntimeResolverContext context)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(ServiceCallSite callSite, TArgument argument)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.Resolve(ServiceCallSite callSite, ServiceProviderEngineScope scope)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.DynamicServiceProviderEngine.<>c__DisplayClass1_0.<RealizeService>b__0(ServiceProviderEngineScope scope)
at MediatR.ServiceFactoryExtensions.GetInstance[T](ServiceFactory factory) in C:\Repos\W\src\MediatR\ServiceFactory.cs:line 16
at MediatR.Wrappers.RequestHandlerBase.GetHandler[THandler](ServiceFactory factory) in C:\Repos\W\src\MediatR\Wrappers\RequestHandlerWrapper.cs:line 20

【问题讨论】:

  • 您能告诉我您是如何注册 MediatR 的吗?
  • 您好,感谢您的回复,
  • public static IServiceCollection AddServiceMediatR(this IServiceCollection services, Func> InjectAssemblies, Func InjectMediatRDecorators) { var assembly = InjectAssemblies().Where(x => x.FullName .Contains("CommandsHandlers", StringComparison.OrdinalIgnoreCase)).ToArray(); if (assemblies.Length > 0) { services.AddMediatR(options => options.AsScoped(), 程序集);注入MediatR装饰器(服务); } 返回服务; }

标签: c# asp.net-core dependency-injection mediatr


【解决方案1】:

我不知道为什么,但它正在工作。 我多次重建解决方案但总是遇到同样的错误,昨天我开始在这个的同一个dll中更改一个类的代码,今天我再次尝试,它开始工作,我不知道如何,但是我只能说这可能是visual studio中的缓存问题。

【讨论】:

    猜你喜欢
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多