2017-01-06 12 views
0

web apiコントローラでは、using keyword内にインスタンスを作成していましたので、使用後にはGCが呼び出され、メモリが解放されます。インスタンスはWeb APIコントローラで作成する必要があります

public class TemplateController : AutoVHCBaseApiController 
    { 
     private readonly ITemplateManager manager; 
     public TemplateController() 
     { 
      manager = new TemplateManager(); 
     } 

     [Route("{id}")] 
     [HttpGet] 
     [ResponseType(typeof(VHC.Core.Common.Beans.CheckTemplate))] 
     public IHttpActionResult Get(int id) 
     { 
      try 
      { 
       CheckTemplate checkTemplate = manager.GetCheckTemplate(id, SiteCode); 
       return Ok(checkTemplate); 
      } 
      catch (ValidationException ex) 
      { 
       return BadRequest(ex.Message, FailureReason.ReasonCodeOptions.ValidationError); 
      } 
     } 
    } 

はなぜconstuctorでインスタンスを作成する必要があります。私の同僚の

私が今使っているコード、

public class TemplateController : AutoVHCBaseApiController 
    { 

     [Route("{id}")] 
     [HttpGet] 
     [ResponseType(typeof(VHC.Core.Common.Beans.CheckTemplate))] 
     public IHttpActionResult Get(int id) 
     { 
      try 
      { 
       using(ITemplateManager manager=new TemplateManager()) 
       { 
        CheckTemplate checkTemplate = manager.GetCheckTemplate(id, SiteCode); 
        return Ok(checkTemplate); 
       } 
      } 
      catch (ValidationException ex) 
      { 
       return BadRequest(ex.Message, FailureReason.ReasonCodeOptions.ValidationError); 
      } 
     } 
    } 

一つは以下のように変更するために私に尋ねましたか? 両方のコードとインスタンスの作成の違いは何ですか?

答えて

3

最初のコードは固く結合されています。これはtroubleを意味します。具体的にはTemplateManagerに依存しているため、アクションを単体テストできません。

具体的にはTemplateManagerを作成するアクションがresponsibleではありませんが、まだクラスが作成を担当しているため、まだ密接に結合されているため、2番目のコードは少し優れています。

もっと良い解決策は、依存性注入プロジェクト全体を処理するためにIOCコンテナを使用することです。例えば。 NinjectIDisposableを処理するので、自分でDispose()に電話する必要はありません。

private readonly ITemplateManager _manager; 
public TemplateController(ITemplateManager manager) 
{ 
    _manager = manager; 
} 

コンクリートTemplateManagerに依存しない一方で、あなたがユニットITemplateManager managerの行動をあざけることによってあなたのGetアクションをテストすることができますこの方法。

+2

私はPetreと同意しました - DJ(依存症注入)はこれを行うための最善の方法です。 –

関連する問題