2011-04-06 115 views
2

非同步控制器獲取功能我是從一個標準的MVC控制器子類化基地控制器。這容器專用於控制器的許多有用的方法。Asp.net MVC - 從我的基本控制器

我現在需要在我的新控制器的一個部分asych功能

然而,要做到這一點,你需要創建一個控制器子類AsyncController

但我也想在我的基地來訪問功能控制器

顯然多重繼承是不可能的

讓我怎麼解決這個得到什麼?

回答

1

你可以外部化你願意重用到服務層,行爲過濾器,過濾器的授權,模型綁定的功能,...這將取決於你願意重用,讓你可以輕鬆地切換基本功能控制器到異步控制器,並仍然保留功能。如果你想使用異步控制器,你將需要從AsyncController派生。

+0

假設爲參數的緣故我希望所有可用在我的基本控制器與基似乎此功能存在正確的位置的功能。這似乎是一個奇怪的決定,迫使你繼承一個特定的控制器,使其成爲asych。它會強制使用脆弱/重複的繼承層次結構 - 除非我錯過了某些東西。 (這當然不是聞所未聞的) – josedelascasa 2011-04-06 20:03:04

+0

@josedelascasa,沒有你是不是缺少什麼。這是框架設計者決定實現這一點的方式。有些批評人士反對他們使用抽象類而不是接口,但事實就是這樣,我們無法做太多的事情。 – 2011-04-06 20:07:15

0

您可以讓您的控制器類繼承IAsyncManagerContainerIAsyncController,然後自己實現此功能,也許使用MVC源代碼中的代碼。你甚至可以把它封裝在你自己的類中,你可以把這個功能委託給它。

+0

是的,這不是一個壞主意。我反過來思考這個問題 - 手動實施Icontroller。但你的方式會減少工作量。感謝 - 將離開這個問題打開的那一刻,雖然 – josedelascasa 2011-04-06 21:13:44

+0

其他建議,但仍不得不重複這對於每個需要非同步的功能雖然 – josedelascasa 2011-04-06 21:15:20

+0

@josedelascasa控制器 - 這就是爲什麼我建議在其自己的類封裝的代碼,然後委託調用。您必須手動爲每個控制器實施方法,但這只是一些樣板代碼的問題。你甚至可以使用代碼片段來自動化它。 – 2011-04-06 21:17:16