2016-11-03 9 views
0

私はASP.NET MVCアプリケーション&に取り組んでいます。 私はすべての私のコントローラ(よく、それらのほとんど)の共通の機能を実装する必要があります。 すべてのコントローラで同じロジックを繰り返す必要はありません。 MVCの最大の利益のための理想的なアプローチは何ですか?複数のASP.NET MVCコントローラ間で共通の機能

ベースコントローラーを作成し、コントローラーで継承している人が見つかりました。しかし、コントローラを視覚化すると、コンテンツ/ビューを返すアクションメソッドしか含まれていないことがわかります。間違っていると私を修正します。

OneController 
    { 
     ActionMethod A1 
     { 
      //Code to return list of objects for the given integer value. So it calls database stored procedure. 
     } 
    } 

...複数のコントローラがあります。

私はまだOneControllerにA1が存在するようにしたいと思っています。ちょうどその論理をどこかの共通の場所に置きます。

また、一般的な方法を配置するために単純なヘルパークラスを作成することをお勧めする人もいます。

あなたはどのようなアプローチがより良い(または他の適切なアプローチ)ものであるか教えてください。ありがとう。

+0

コントローラーに必要なアクションメソッドとメソッドを含めることができます。ベースコントローラークラスは、あなたが好きなことをする良いオプションです – DanielVorph

答えて

1

ほとんどの場合、私たちがActionsについて話しているときにベースコントローラーから継承すること、または実際に関連しているメソッドには同意すると思います。もちろん、ベースコントローラーをすべて使用することができます。あなたの選択。

これ以外に2つのオプションがあります。多様性の可能性がほとんどないクラス(実装に応じて振る舞いを変更する)では、静的クラスを作成してコントローラ内で使用するだけで十分です。例として、数学計算を行うクラスがありますが、これは本質的に多態性ではありません。

それ以外の場合は、依存関係注入を使用することを強くお勧めします。単体テストがより簡単になる理由の1つです。組み込みエンジンを使用してMVC 4以降の操作を行う方法についてのガイドがあります:https://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection NinjectやSimple Injectorを使用したくない場合は、コントローラのインスタンスを取得するために、独自のControllerActivatorを実装し、Ninjectを使用します。

通常、あなたのコントローラは、このように、コンストラクタで依存関係になるだろう、依存性注入器を使用します。詳細は

public class StoreController : Controller 
{ 
    private IStoreService service; 

    public StoreController(IStoreService service) 
    { 
     // service in an injected dependency 
     this.service = service; 
    } 
} 

、GoogleのASP.NETの依存性注入。

+0

あなたの入力に感謝します。私は実際にBaseRepositoryに共通のメソッドを配置してしまい、他のすべてのリポジトリクラスが継承できるようになりました。 – GreenBinary

関連する問題