Как сделать обобщённый Query и QueryHandler используя MediatR
Пытаюсь создать обобщённый Query запрос для получения объекта по его Id используя библиотеку MediatR. Первым делом я создал следующий сервис:
public interface IServiceBase<T> : IDomainService
{
Task<T> GetObjectByIdAsync(Guid id, CancellationToken cancellationToken = default);
}
public class ServiceBase<T> : IServiceBase<T> where T : class, IEntity
{
private readonly IAsyncRepository<T> _repository;
public ServiceBase(IAsyncRepository<T> repository)
{
if (repository == null)
throw new ArgumentNullException(nameof(repository));
_repository = repository;
}
public async Task<T> GetObjectByIdAsync(Guid id, CancellationToken cancellationToken = default)
{
return await _repository.GetByIdAsync(id, cancellationToken);
}
}
Далее сделал обобщённый запрос и его обработчик
public class FindObjectByIdQuery<T> : IRequest<T>
{
public FindObjectByIdQuery(Guid id)
{
Id = id;
}
public Guid Id { get; }
}
Вызываю я данный запрос в обработчике команды
public class CreateCityHandler : IRequestHandler<CreateCity>
{
private readonly ICityService _cityService;
private readonly IMediator _mediator;
public CreateCityHandler(ICityService cityService, IMediator mediator)
{
if (cityService == null)
throw new ArgumentNullException(nameof(cityService));
if (mediator == null)
throw new ArgumentNullException(nameof(mediator));
_cityService = cityService;
_mediator = mediator;
}
public async Task<Unit> Handle(CreateCity request, CancellationToken cancellationToken)
{
var country = await _mediator.Send(new FindObjectByIdQuery<Country>(request.CountryId), cancellationToken);
await _cityService.CreateCityAsync(request.Name, country, cancellationToken);
return Unit.Value;
}
}
При обработке данный команды у меня возникает ошибка
Вот что я заметил если Service сделать необобщённым, то всё работает хорошо.
UPD
Действительно, после правильной регистрации дженерик сервисов всё заработало, но при обращении с обобщённому Query возникает ошибка.
В чём может быть дело?
Id страны передаю правильный
