Utilisation de delegates d’événements dans une application Web multi-locataire

Je développe une application Web multi-locataires multi-locataires utilisant asp.net Mvc 5.

Dans ma couche de service, je définis des événements personnalisés pour chaque action importante et les relève une fois que ces actions sont exécutées. Par exemple

Public event EventHandler EntityCreated; Public void Create(Entity item) { Save(item); ...... EntityCreated(this, item); } 

Je compte connecter les règles métier et les notifications à ces événements. La principale raison pour laquelle je souhaite utiliser des événements est le découplage de la logique et la facilité de connexion de plusieurs gestionnaires d’événements sans modifier ma couche de service.

Question: Est-il judicieux d’utiliser des événements et des delegates dans asp.net?

La plupart des exemples que je trouve en ligne concernent des formes de gains ou wpf. Je profite des applications multithread. De plus, les événements sont définis une fois par formulaire et sont actifs pendant toute la durée de vie du formulaire.

Mais dans mon cas, les événements se feront par requête http . Alors, est-ce une surcharge qui définit ces événements?

Comme d’autres l’ont fait remarquer, le bus de publication / sous-réseau ou d’événement est une solution. Une autre solution est quelque chose comme ce que vous essayez de faire ici mais en le rendant plus formel.

Prenons un exemple spécifique de création d’un client. Vous souhaitez envoyer un courrier électronique de bienvenue lorsqu’un nouveau client est créé dans l’application. Le domaine ne doit s’occuper que de la création du client et de son enregistrement dans la firebase database, et non de tous les autres détails tels que l’envoi de courriers électroniques. Vous ajoutez donc un événement CustomerCreated. Ces types d’événements sont appelés événements de domaine, par opposition aux événements d’interface utilisateur tels que les clics sur les boutons, etc.

Lorsque l’événement CustomerCreated est déclenché, il doit être géré quelque part dans le code afin qu’il puisse effectuer les tâches nécessaires. Vous pouvez utiliser un EventHandlerService comme vous l’avez mentionné (mais cela peut rapidement devenir préoccupant pour trop d’événements) ou utiliser le modèle décrit par Udi Dahan . J’ai utilisé avec succès la méthode d’Udi avec de nombreux conteneurs DI et la beauté de ce modèle réside dans le fait que vos classes restnt conformes à la SRP. Vous devez simplement implémenter une interface et un code d’enregistrement particuliers au moment du démarrage de l’application en utilisant la reflection.

Si vous avez besoin d’aide supplémentaire sur ce sujet, faites-le moi savoir et je pourrai partager avec vous les extraits de code nécessaires à son fonctionnement.

J’ai implémenté l’implémentation d’Udi Dahan comme l’a souligné @Imran mais avec quelques modifications.

Mes événements sont générés dans une couche de services et pour cela, l’utilisation d’une classe statique semble correcte. Ont également ajouté le support pour async / wait.

En outre, le chemin des événements et des delegates a fonctionné, mais il a semblé être une surcharge d’enregistrer les événements par demande.

J’ai blogué ma solution ici http://www.teknorix.com/event-driven-programming-in-asp-net