2011-04-06 18 views
2

私は標準のMVCコントローラからサブクラス化されたベースコントローラを持っています。このコンテナには、コントローラ固有の便利なメソッドがたくさんあります。Asp.net MVC - Asynchコントローラはベースコントローラから機能を取得します

私は今あなたがAsyncController

をサブクラスコントローラを作成する必要があります。しかし、私はまた私のベースに機能にアクセスしたいことをやって、私の新しいコントローラが

の一つに、いくつかのasych機能を持っている必要がありますコントローラ

は明らかに多重継承はので、どのように私はこの問題を回避ん

ことはできませんか?

答えて

1

サービスレイヤー、アクションフィルター、承認フィルター、モデルバインダーに再利用したい機能を外部化することができます。再利用したい機能に依存しますので、ベースを簡単に切り替えることができますコントローラを非同期コントローラに接続しても機能は保持されます。非同期コントローラを使用する場合は、AsyncControllerから派生する必要があります。

+0

引数のために、ベースコントローラーで使用できるすべての機能が必要で、ベースがこの機能が存在するのに適しているようだとします。特定のコントローラをサブクラス化してasychにするように強制する奇妙な決定に思えます。私は何かが欠けていない限り、脆い/繰り返しの継承階層を強制します。 (確かに聞いたことはありません) – josedelascasa

+0

@josedelascasa、あなたは何も欠けていません。フレームワークの設計者がこれを実装する方法です。インターフェイスの代わりに抽象クラスを使用しているという事実に対して、いくつかの批評家がいますが、それはその方法であり、私たちはあまりそれについて行うことはできません。 –

0

コントローラークラスをIAsyncManagerContainerIAsyncControllerに継承させ、おそらくMVCソースコードのコードを使用して、この機能を自分で実装することができます。機能を委譲する独自のクラスにこれをカプセル化することもできます。

+0

ええ、それは悪い考えではありません。私はこのことについて、手動でIcontrollerを実装することを考えていました。あなたの方法ラウンドを行うためにはあまり仕事が少ないでしょう。おかげで - – josedelascasa

+0

しかし、まだこの質問を他の提案のために開いたままにしますが、まだ非同期機能を必要とする各コントローラのためにこれを繰り返さなければなりません – josedelascasa

+0

@josedelascasa - それで私は、独自のクラスでコードをカプセル化し、 。各コントローラのメソッドを手動で実装する必要がありますが、それは単なる定型コードの問題です。コードスニペットを使用して自動化することさえ可能です。 –

関連する問題