2010-02-12 2 views
2

Я использую систему плагинов в приложении ASP.NET MVC, над которым я работаю (свободно основанный на реализации проекта витрины MVC Роба Коннери).C# публикация статических событий

В дополнение к выполнению методов плагина, я также хочу разрешить классам предоставлять различные крючки событий, на которые может подписаться плагин.

я публикую свои события так:

 #region Events 

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

И пример плагина:

 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("An item was added to the cart."); 
    } 

    void Cart_LineRemoved(object sender, EventArgs e) { 
     _loggerService.Info("A line was removed from the cart."); 
    } 

Это хороший и поточно способ публикации и подписки на эти события?

Любые мысли или предложения, оцененные.

Благодаря Бен

ответ

3

Назначьте EventHandler, чтобы локальный вар перед обжигом их.

ItemAddedEventHandler handler = ItemAdded; 

if (handler != null) 
{ 
    handler(this, EventArgs.Empty) 
} 

Существует условие гонки между проверкой нулевого и обстрелом события. В любом случае вам лучше follow the guidelines.

+0

Я просто любопытство, потому что я хочу что-то узнать, почему это все иначе или лучше? Можете ли вы обновить свой ответ, чтобы включить почему? – jsmith

+0

Конечно, извините за это. – ziya

+0

отлично, спасибо. Увидели эту статью, но пропустили точку зрения о состоянии гонки. –

Смежные вопросы