Как правило, класс не должен отвечать за создание своих собственных зависимостей.
Лучше всего передать зависимость в конструктор: -
public class HomeController : Controller
{
private IMovieRepository _db;
public HomeController(IMovieRepository db)
{
_db = db;
}
public ActionResult Index()
{
return View(_db.MovieSet.ToList());
}
}
Это называется «Внедрение зависимостей», и оно желательно, потому что оно уменьшает стандартный код, а также позволяет вам предоставлять другие реализации IMovieRepository во время выполнения (например, если вы тестируете модуль).
ASP.NET MVC имеет хук, позволяющий вам сделать это (ControllerBuilder), но, к счастью, вам не нужно накатывать свои собственные, есть готовые решения. Я рекомендую http://ninject.org/, потому что его очень легко настроить.
Таким образом, ваш контейнер IoC (независимо от того, в какую часть передается зависимость) может создавать только один контекст для каждого HTTP-запроса и удалять его в конце запроса.
Проверить, например, Что такое инверсия контроля?