В контроллере web-api я использовал экземпляр в пределах using keyword
, поэтому, когда он выйдет из использования, будет вызван GC
, и память будет выпущена.Где экземпляр должен быть создан в контроллере web-api
код, который я использую сейчас,
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);
}
}
}
Один из моей коллеги попросил меня изменить, как показано ниже:
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? Какая разница между обоими кодами для создания экземпляра?
Я согласился с Petre - DJ (инъекция зависимостей) - лучший способ сделать это. –