Тесная связь из-за new MyLocations()
означает, что вы не сможете управлять его поведением.
создать абстракцию зависимости
public interface ILocations {
IEnumerable<Location> GetLocations();
}
имеет реализацию, производную от абстракции
public class MyLocations : ILocations {
public IEnumerable<Location> GetLocations() {
//...db calls here
}
}
и контроллер рефакторинга в зависимости от абстракции
public class MyController : Controller {
private readonly ILocations myLocations;
public MyController(ILocations myLocations) {
this.myLocations = myLocations;
}
public ActionResult Index(int id) {
var locations = myLocations.GetLocations();
//linq code here that filters based on id
return View(filteredLocations);
}
}
Контроллер теперь тестируемый, так как его заменитель может быть введен в контроллер при тестировании изолированно, либо через фиктивную структуру, либо по наследству.
В производственном процессе вы должны настроить DependencyResolver
для сопоставления интерфейса с реализацией и вставить его в контроллер.
Ссылка ASP.NET MVC 4 Внедрение зависимостей