2011-05-02 16 views
1

ここにはいくつかの同様の質問がありますが、いずれも回答されていません。他のコントローラで公開機能を呼び出す?

どうすればよいですか?

私はその機能を使用するたびに、他のControllerクラスの新しいインスタンスを作成できますが、長期的には悪いようですが、間違っていますか?

機能(例:UserController.GetAllUsers())を共有する必要がありますか?

+0

共有機能の場合、なぜそれをコントローラに入れ、サービスレイヤ(またはWebインターフェイスが上にあるレイヤ)に配置しないのでしょうか。 – R0MANARMY

+0

これは、共有機能ではありません。そして、それはuserControllerに深く関連しているので、私はそこに保持したいと思います。現時点では、私はUserControllerクラスの新しいインスタンスを作成し、そのインスタンスを呼び出しています。 – Anders

+2

それは*共有関数です - あなたは2つのコントローラで同じ機能が必要であるという単純な事実が証明しています。そして、してください、あなたがやっているようなコントローラを使用しないでください、それは間違っています。 – rsenna

答えて

3

他のコントローラでこのメソッドをアクセス可能にすることはお勧めしません。 ASP.NET MVCでは、コントローラーはさまざまな方法(インジェクション、ファクトリーなど)で作成でき、使用されているメカニズムをエミュレートすることは保証できません。

むしろ、GetAllUsersメソッドを、その値を返すために必要なパラメータを取る別のクラス/メソッドに分解する必要があります。次に、両方のコントローラーからその新しいクラスに適切な値を渡します。

クラスには、ASP.NET MVCについての知識がありません。コントローラインスタンスからそれらを渡します。

+0

さて、ありがとう!私は、私のコントローラからhelperClassesへのビューをもたらさないすべての関数を移動します。それは大丈夫だろう、そう?私はMVCには新しく、ちょうど独学です。私はこの根本原理のいくつかを見逃しているかもしれません。 – Anders

+1

@アンダー:それはかなり大丈夫です。コントローラーがクエリー文字列またはフォームの値を.NETタイプに変換した後、ヘルパーメソッドに渡す可能性があります。コントローラを自分で作成したくない理由は、ASP.NET MVCではコントローラが通常は 'ControllerContext'で設定され、新しいコントローラを作成するだけでその情報が正しく設定されないからです。ヘルパークラスの作成では、 'ControllerContext'の必要性を取り除きます。コントローラは' ControllerContext'とあなたのロジックの間のアダプタとして機能します。 – casperOne

+0

おかげでcasperOne!非常によく説明されています:) – Anders

関連する問題