Открытый универсальный тип службы «[TRequest,TResponse]» не равен открытому универсальному типу реализации «[TRequest,TRC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Открытый универсальный тип службы «[TRequest,TResponse]» не равен открытому универсальному типу реализации «[TRequest,TR

Сообщение Anonymous »

При использовании net9 у меня наблюдается следующее поведение MediaTr:

Код: Выделить всё

public class ValidationBehavior : IPipelineBehavior where T1 : IRequest where T2 : Outcome, new() {

private readonly IEnumerable _validators;

public ValidationBehavior(IEnumerable validators) {
_validators = validators;
} // ValidationBehavior

public Task Handle(T1 request, RequestHandlerDelegate next, CancellationToken cancellationToken) {

List errors = _validators
.Select(x => x.Validate(request))
.SelectMany(x => x.Errors)
.Where(x => x != null)
.Select(x => new Error(x.PropertyName, x.ErrorMessage))
.ToList();

if (errors.Any()) {
T2 Outcome = new T2 { Status = Status.Invalid, Payload = new Payload(errors) };
return Task.FromResult(Outcome);
}

return next();

} // Handle
Затем я зарегистрировал его, используя:

Код: Выделить всё

  builder.Services.AddMediatR(x => {
x.RegisterServicesFromAssemblyContaining
();
x.AddOpenBehavior(typeof(ValidationBehavior));
}).AddBehaviors();
При попытке получить службу ValidationBehavior я получаю следующую ошибку:

Код: Выделить всё

System.ArgumentException: Arity of open generic service type 'MediatR.IPipelineBehavior`2[TRequest,TResponse]' does not equal arity of open generic implementation type 'ValidationBehavior`3[TRequest,TResponse,T]'. (Parameter 'descriptors')
Похоже, что регистрация MediaTr принимает IPipelineBehaviors только с двумя универсальными типами:

Код: Выделить всё

  services.AddMediatR(cfg => {
cfg.AddBehavior();
cfg.AddOpenBehavior(typeof(OuterBehavior));
cfg.AddOpenBehavior(typeof(InnerBehavior));
cfg.AddOpenBehavior(typeof(ConstrainedBehavior));
});
Как это решить?


Подробнее здесь: https://stackoverflow.com/questions/791 ... eneric-imp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»