1. ホーム
  2. asp.net-mvc

[解決済み] asp.net mvcはコントローラを別のプロジェクトに置く

2022-10-18 14:56:56

質問

私はasp.net mvcを学んでいるところですが、コントローラを別のプロジェクトに移動させる方法を見つけようとしています。 以前、asp.netのウェブアプリを設計したときは、通常、モデル用に1つのプロジェクトを作成し、ロジック用に別のプロジェクトを作成し、そして、ウェブがありました。

今、私は asp.net mvc を学んでいるので、同じようなパターンに従って、モデルとコントローラをそれぞれ別のプロジェクトに入れ、ビュー/スクリプト/CSS をウェブに残すだけでいいと思っていました。 モデルの部分は簡単でしたが、私が理解していないのは、別のプロジェクトにある私のコントローラを"found"にする方法です。 また、これは望ましいことなのかどうか知りたいです。 ありがとうございます。

どのように解決するのですか?

まず第一に、モデルを別のプロジェクトに置くことは確かに良いアイデアです。あなたが発見したように、これは些細なことです。

コントローラとビューについては、特定のアプリケーションでそうする特別な必要性があるかもしれませんが、ほとんどの基本的なプロジェクトでは、それらを分離する明白な利点はないと思います。

もしこれを行うのであれば、フレームワークにコントローラを見つける方法を教える必要があります。これを行うための基本的な方法は、独自のControllerFactoryを提供することです。DefaultControllerFactory のソースコードを見れば、これがどのように行われるのかがわかるでしょう。このクラスをサブタイプし、GetControllerType(string controllerName) メソッドをオーバーライドすることで、ご質問の内容を十分に実現できるかもしれません。

独自のカスタムControllerFactoryを作成したら、次の行をglobal.asaxのApplication_Startに追加して、フレームワークにそれを見つける場所を教えます。

ControllerBuilder.Current.SetControllerFactory(new MyControllerFactory());

更新しました。 読む この記事 をご覧ください。については、その投稿に対する Phil Haack のコメントも参照してください。

ControllerBuilder.Current.DefaultNamespaces.Add(
    "ExternalAssembly.Controllers");

...これは完全な解決策ではありませんが、単純なケースではおそらく十分でしょう。