Je suis en train d'utiliser un système de plugin sur une application ASP.NET MVC sur laquelle je travaille (inspiré en partie de l'implémentation du projet MVC storefront de Rob Connery).
En plus d'exécuter des méthodes de plugin, je veux également permettre aux classes de fournir divers points d'ancrage d'événements auxquels un plugin peut s'abonner.
Je publie mes événements de la manière suivante :
#region Événements
public static event ItemAddedEventHandler ItemAdded;
internal virtual void OnItemAdded(EventArgs e)
{
if (ItemAdded != null)
ItemAdded(this, new EventArgs());
}
public static event LineRemovedEventHandler LineRemoved;
internal virtual void OnLineRemoved(EventArgs e)
{
if (LineRemoved != null)
LineRemoved(this, new EventArgs());
}
#endregion
public delegate void ItemAddedEventHandler(object sender, EventArgs e);
public delegate void LineRemovedEventHandler(object sender, EventArgs e);
Et un exemple de plugin :
public EventHooks() {
Cart.ItemAdded += new Cart.ItemAddedEventHandler(Cart_ItemAdded);
Cart.LineRemoved += new Cart.LineRemovedEventHandler(Cart_LineRemoved);
}
void Cart_ItemAdded(object sender, EventArgs e) {
_loggerService.Info("Un article a été ajouté au panier.");
}
void Cart_LineRemoved(object sender, EventArgs e) {
_loggerService.Info("Une ligne a été supprimée du panier.");
}
Est-ce une bonne manière et sécurisée en termes de thread de publier et de s'abonner à ces événements ?
Toutes réflexions ou suggestions sont les bienvenues.
Merci Ben