2015-10-20 2 views
0

J'ai utilisé MediatR avec beaucoup de succès dans mon projet actuel. L'idée d'utiliser un mediator pipeline pour s'attaquer aux préoccupations transversales est vraiment bonne.Avoir un seul Request/RequestHandler pour toutes les demandes entrantes

Une chose que je ne reçois pas (et peut-être la raison est mon manque d'exposition à C# covariance/contravariance) est de savoir comment je peux gérer toutes les demandes entrantes dans un seul gestionnaire? Je voudrais effectuer une action avant qu'une demande est exécutée quel que soit leur type:

IRequest 

ou

IRequest<Foo> 

Je reçois ce que Jimmy dit au sujet de la PreRequestHandler mais je ne l'ai pas été en mesure de mettre en œuvre un unique pour tous les demandes car ils sont toujours dactylographiés (je pourrais implémenter un IPreRequest pour chaque requête individuelle que j'ai mais cela ne sonne pas bien) ....

Des idées s'il vous plaît?

+0

Aucune idée de ce que MediatR est, mais ne '' IRequest héritent de 'IRequest' ? Sinon, ce serait assez bête. Edit: selon la source, 'IRequest: IRequest ', où 'Unit' est un paramètre générique' out'. Bien sûr, vous pouvez faire quelque chose avec ça, par exemple en laissant votre 'Foo' hériter de' Unit'. – CodeCaster

+0

Je devais alors faire en sorte que tous mes paramètres sortent de Unit, ce qui ne semble pas faisable? –

Répondre

0

Voici comment je le fais avec Castle Windsor et Mediatr (disons que nous voulons enregistrer et autoriser les appels à tous les gestionnaires). Voir l'essentiel que j'ai fait: Decorator unit test

Notez que lors de l'enregistrement des gestionnaires avec le conteneur (Castle Windsor dans mon cas), vous devez les enregistrer dans le bon ordre (à Windsor au moins, YMMV).

Aussi, notez que je fais des exclusions lors de l'enregistrement composant (pour les décorateurs, inscrivez-vous tous les types de béton excluant les autres gestionnaires de décorateur.)