2012-03-01 9 views
0

コントローラで使用されるエンティティとサービスを宣言するのに最適な場所はどこですか?コンストラクタまたはアクション内で?コントローラ内のエンティティとサービスを宣言する場所

public class CourseController : Controller 
    { 
     MyEntities entities; //DECLARE THIS HERE? 
     private readonly IMyService _service; //DECLARE THIS HERE? 

     public MyController() 
     { 
      entities = new MyEntities(); //INITIALIZE HERE? 
      _service = new MyService(_entities); //INITIALIZE HERE? 
     } 


     public ActionResult Detail(int ID) 
     { 
      using (MyEntities _entities = new MyEntities()) //OR DECLARE AND INITILIZE HERE? 
      { 
       IMyService _service = new MyService(_entities); //OR DECLARE AND INITILIZE HERE? 
       var myCourse = _service.GetCourseById(ID); 

       return View(myCourse); 
      } 
     } 
    } 

答えて

0

私はコンストラクタでそれらを宣言し、過負荷を与えてユニットテスト目的で偽物を注入することができます。

private readonly MyEntities entities; 
    private readonly IMyService _service; 

    public MyController() 
    { 
     _entities = new MyEntities(); 
     _service = new MyService(_entities); 
    } 

    public MyController(MyEntities myEntities, IMyService myService) 
    { 
     entities = myEntities; 
     _service = myService; 
    } 
+0

私はこれをさらに1ステップ進めて、依存性注入容器を使用します。 Ninjectは設定と学習が非常に簡単です。 Ninject.MVC3 Nugetパッケージをインストールし、App_Startフォルダに作成したファイルに依存関係を設定するだけです。 – Dismissile

関連する問題