2013-10-21 35 views
1

我希望替換System.Web.Mvc.ActionMethodSelector的實現,FindAction方法使用ReflectedControllerDescriptor,但希望利用現有實現,理想情況下是從ActionMethodSelector派生。但是,因爲班級被標記爲內部,所以我可以看到「正確」這樣做的唯一方法是從ReflectedControllerDescriptor派生出來,並通過從ActionMethodSelector複製代碼實現FindAction。但是,我希望避免這種情況,這是由於代碼的數量以及試圖使其與框架保持同步的潛在問題。ASP.NET MVC ActionMethodSelector依賴關係注入/替換

我正在考慮以下方法:

  1. 咬咬牙,複製代碼
  2. 使用反射,以便採取現有實現的優勢

是否還有其他的方法我錯過了,更好還是以其他方式?

+0

你指的ActionMethodSelectorAttribute類? http://msdn.microsoft.com/en-us/library/system.web.mvc.actionmethodselectorattribute(v=vs.108).aspx –

+0

@PaulTaylor不,內部類System.Web.Mvc.ActionMethodSelector:https ://github.com/ASP-NET-MVC/aspnetwebstack/blob/master/src/System.Web.Mvc/ActionMethodSelector.cs –

回答

0

我知道這是有點晚了回答還是我給它一個嘗試.... :)

我相信你會莫名其妙地想調整在ASP.NET MVC操作方法的選擇過程。如果我的理解是正確的,可以通過派生自System.Web.Mvc.ActionMethodSelectorAttribute來使用自定義的ActionMethodSelectorAttribute。在自定義選擇器中編寫自己的自定義邏輯,並將其應用於操作方法的頂部。我相信這樣可以在不干擾自然過程的情況下調整動作方法選擇過程。

如果你願意,你可以訪問以下鏈接:http://programersnotebook.blogspot.in/2014/02/aspnet-mvc-actionnameselector-and.htmlhttp://programersnotebook.blogspot.in/2014/02/aspnet-mvc-actionnameselector-and_2.html

+0

嗨,謝謝你的回答。我需要以某種方式在可能的動作方法列表中選擇一個優選的動作方法,即給定的動作A和動作B都是有效的候選者,由於某些條件而選擇動作A.我看不到任何方式使用ActionMethodSelectorAttribute來實現這一點,而不需要複製大量的代碼。感謝給我一個新的途徑來調查,雖然:) –

+0

我相信,如果參數 - 你想建立你的條件 - 可以成爲請求的一部分,那麼ActionMethodSelector可以以某種方式使用。在操作方法選擇器可以以您認爲合適的任何方式播放請求,並調整操作方法的選擇過程。如果您可以分享具體要求以及如何實施這些要求,我可以幫助您更好。 –

+0

我希望更喜歡派生類中聲明的操作,以便輕鬆覆蓋也會更改方法簽名的操作。目前我的團隊必須重寫原始方法,使用'NonAction'裝飾它,然後實施替換方法。爲了實現這一點,我需要知道候選方法的整個列表,並丟棄在超類中聲明的列表。我看不到用'ActionMethodSelectorAttribute'這樣做的簡單方法。 –