2012-03-07 69 views
0

我有一個Mvc3項目,我想註冊自定義事件掛鉤。Mvc3自定義事件掛鉤

這樣我就可以註冊一個類似「用戶登錄」的事件。我不想在控制器中執行此操作,因爲在其他項目中存在業務邏輯。

因此,在我的Mvc3項目中,我想編寫一些類,這些類將具有必須在用戶被鎖定時執行的代碼。但是,如何將這些類(或它們的實例)註冊到事件中。使用反射搜索從特定基類繼承的所有類是否是一個好主意,還是有其他更智能的方法?

所以,我不想監視被調用的動作,我希望業務邏輯在我的Mvc3-Project中觸發某些類。

+0

您只是想陷入登錄事件,還是想在登錄後(或之前)影響事情?另外,你認爲你通過反射搜索「特殊基類」會發揮什麼作用? – 2012-03-07 16:33:52

+0

我想在登錄後影響事物。在我的控制器操作中,我在業務邏輯中調用登錄方法。在Buisness邏輯中有一個事件「OnUserLogon」。在我的mvc項目中,我現在想要註冊該事件。但問題是,html是無狀態的,所以我正在考慮編寫一個接口或基類來查找所有必須註冊到事件的類 – Chris 2012-03-07 16:38:26

+0

您是否正在使用控制容器的反轉? – jgauffin 2012-03-09 15:27:35

回答

0

編輯
正如克里斯在下面的評論中指出,MVC3是無狀態的,這意味着該解決方案,你將不得不重新訂閱在每次請求這些事件。這可能不是一個很好的MVC解決方案。


您是否考慮過全球事件服務?

粗糙例如:


class Example : IEventReceiver 
{ 
    public void Init() 
    { 
     EventService.Subscribe("Logon", this); 
    } 

    private void OnEvent(string eventName) 
    { 
     // Do logon stuff here. 
    } 
} 

您需要創建EventService類,這可能是一個單身或服務。它可能具有與以下類似的界面:

public interface IEventService 
{ 
    void Subscribe(string eventName, IEventReceiver receiver); 
    void Unsubscribe(string eventName, IEventReceiver receiver); 
    void DispatchEvent(string eventName); 
} 

public interface IEventReceiver 
{ 
    void OnEvent(string eventName); 
}
+0

我仍在考慮您的解決方案。主要的問題是,mvc3是無狀態的,所以我必須在每次加載頁面時註冊這些事件。 – Chris 2012-03-09 15:00:41

+0

這是一個很好的觀點。這可能不是一個好的解決方案。 – blachniet 2012-03-09 15:23:43