✅ Cannot resolve scoped service...
What I did wrong? Here's how I injected
Injection of dispatchers:
IQueryHandlerIQueryHandlers to DI:services.Scan(selector =>
{
selector.FromCallingAssembly()
.AddClasses(filter => { filter.AssignableTo(typeof(IQueryHandler<,>)); })
.AsImplementedInterfaces()
.WithScopedLifetime();
});services.Scan(selector =>
{
selector.FromCallingAssembly()
.AddClasses(filter => { filter.AssignableTo(typeof(IQueryHandler<,>)); })
.AsImplementedInterfaces()
.WithScopedLifetime();
});Injection of dispatchers:
services.AddSingleton<ICommandDispatcher, CommandDispatcher>()
.Decorate<ICommandDispatcher, CommandDispatcherDecorator>();
services.AddSingleton<IQueryDispatcher, QueryDispatcher>();services.AddSingleton<ICommandDispatcher, CommandDispatcher>()
.Decorate<ICommandDispatcher, CommandDispatcherDecorator>();
services.AddSingleton<IQueryDispatcher, QueryDispatcher>();QueryDispatcherQueryDispatcher:public class QueryDispatcher : IQueryDispatcher
{
private readonly IServiceProvider _serviceProvider;
public QueryDispatcher(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider;
public Task<TQueryResult> Dispatch<TQuery, TQueryResult>(TQuery query, CancellationToken ct)
{
var handler = _serviceProvider.GetRequiredService<IQueryHandler<TQuery, TQueryResult>>();
return handler.Handle(query, ct);
}
}public class QueryDispatcher : IQueryDispatcher
{
private readonly IServiceProvider _serviceProvider;
public QueryDispatcher(IServiceProvider serviceProvider) => _serviceProvider = serviceProvider;
public Task<TQueryResult> Dispatch<TQuery, TQueryResult>(TQuery query, CancellationToken ct)
{
var handler = _serviceProvider.GetRequiredService<IQueryHandler<TQuery, TQueryResult>>();
return handler.Handle(query, ct);
}
}