Tout d'abord, j'utilise Résultats couramment en combinaison avec mediatr et Validation fluide A > j'ai initialement suivi Cet article mais au lieu de réinventer la roue, j'ai commencé à utiliser des fluentresults dans mon pipeline de validation fluide. Fondamentalement, toutes les réponses provenant de mes requêtes de CQRS sont enveloppées dans l'objet de résultat, cela évite de devoir fonctionner avec des exceptions comme une méthode d'utilisation d'erreurs. P> Cependant, je ne peux pas obtenir mon pipeline de jouer sympa: protected override void Load(ContainerBuilder builder)
{
var assembly = Assembly.GetExecutingAssembly();
// MediatR
builder.AddMediatR(assembly);
// Register the Command's Validators (Validators based on FluentValidation library)
builder.RegisterAssemblyTypes(assembly)
.Where(t => t.IsClosedTypeOf(typeof(IValidator<>)))
.AsImplementedInterfaces();
// Register all the Command classes (they implement IRequestHandler) in assembly holding the Commands
builder.RegisterAssemblyTypes(assembly)
.AsClosedTypesOf(typeof(IRequestHandler<,>));
// Register Behavior Pipeline
builder.RegisterGeneric(typeof(ValidationPipeline<,>)).As(typeof(IPipelineBehavior<,>));
}
3 Réponses :
Vous devriez changer p>
Où TRESPONSE: Classe P>
à p>
où TRESPonse: résultat p>
et assurez-vous que toutes vos demandes sont IREQUEST où T est la réponse réelle que vous souhaitez revenir. p>
Juste ce que je pensais!
Merci de votre réponse, j'ai essayé cela et le pipeline cesse d'être appelé au moment où je change la "classe" en "résultat".
@Jasonlandbridge Avez-vous aussi changé vos gestionnaires aussi?
@Dariogriffo, oui j'ai essayé cela, mais cela a fini par casser la façon dont Mediatr fonctionne. J'aurais besoin de 2 types de tresses différentes pour que cela fonctionne comme suggéré. TRESPonse peut être soit en résultat
J'étais mon poste, mais je suis devenu si longtemps que je pensais que c'est presque une réponse à mon problème.
J'ai pu isoler le problème à la ligne suivante: p>
// At the top of my handle function var result = await ValidateAsync<GetItemByIdQuery, GetItemByIdQueryValidator>(request); if (result.IsFailed) return result;
I (mainteneur de fluentressults) et un autre utilisateur fluentressults / MediaTR a ajouté des solutions possibles dans la question GITUB. Ici le lien: https://github.com/altmann/fluentresults/issues/54 p>
Mise à jour: Voici un exemple fonctionnel complet HTTPS: / /Github.com/altmann/fluentresults#mediatr-request-Handlers-Returning-Result-Objects P>
Merci beaucoup! J'ai réussi à résoudre mon problème grâce à votre aide, donc j'ai marqué cela comme réponse acceptée. La solution de travail peut être trouvée ici: Github.com/altmann/fluentresults/issues/ ...
Cela compile-t-il et courait-il? Mais continue de retourner
f code> comme null?
Si vous deviez remplacer l'utilisation de la TRESPonse avec le résultat de la classe de béton (puisque vous dites que le résultat sera toujours utilisé pour le résultat, que se passe-t-il?
@Annl. Merci pour votre commentaire, j'ai essayé cela et le pipeline cesse d'être appelé au moment où je change la "classe" en "résultat". J'ai mis à jour le message avec ma configuration Autofac qui pourrait être liée
C'est intéressant. Je me demande: il semble que
TRESPonse code> n'est pas vraiment un
résultat code> objet, ou peut-être que cela ne réalise pas que c'est. Pouvez-vous déboguer et mettre un point d'arrêt à la ligne où vous convertissez en
TRESPonse code>, vous pouvez donc vérifier ce que le type concret de
TRESPONS code> est à l'exécution?
@Annl. Bonne suggestion, j'ai essayé cela et la TRESPonse était un objet de résultat avec le paramètre T passé. J'ai ajouté une réponse expliquant comment je me suis retrouvé avec une solution de contournement.