0
votes

Utilisation des résultats couramment dans un pipeline de validation MediaTR pour renvoyer un résultat

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<,>));

    }


5 commentaires

Cela compile-t-il et courait-il? Mais continue de retourner f 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 n'est pas vraiment un résultat 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 , vous pouvez donc vérifier ce que le type concret de TRESPONS 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.


3 Réponses :


2
votes

Vous devriez changer

Où TRESPONSE: Classe

à

où TRESPonse: résultat

et assurez-vous que toutes vos demandes sont IREQUEST

où T est la réponse réelle que vous souhaitez revenir.


4 commentaires

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 ou CustomClass, et j'aurais besoin que cela ne soit que CustomClass pour le faire fonctionner, mais je ne peux pas ensuite renvoyer le résultat en même temps, que je devrais le faire fonctionner.



0
votes

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;


0 commentaires

1
votes

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

Mise à jour: Voici un exemple fonctionnel complet HTTPS: / /Github.com/altmann/fluentresults#mediatr-request-Handlers-Returning-Result-Objects


1 commentaires

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/ ...