Мне нужно получить ссылку на контейнер
Нет, вы не делаете. Вы should never need to reference the container (или DependencyResolver
) из вашей заявки.
Используйте конструктор инъекции вместо:
public class HomeController : Controller
{
private readonly ITestService testService;
// constructor
public HomeController(ITestService testService)
{
this.testService = testService;
}
public ActionResult Index()
{
return View(this.testService);
}
}
Поскольку вы используете пакет интеграции MVC3 единства, вы, вероятно, зарегистрирован Unity конкретных DependencyResolver
в пути запуска приложения. Это выглядит так же, как это:
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
Когда вы сделаете это, ваш обычай DependencyResolver
будет делегировать создание контроллеров контейнера Unity и контейнер Unity способен вводить depdencies конструктора-х контроллеров.
Следующее, что вам никогда не нужно делать - это позволить взглядам делать какую-либо работу и делать их зависимыми от ваших услуг. Представления должны быть немыми и ничего не делать, как отображать данные, которые они получают от контроллера, и преобразовывать их в HTML (или JSON или что-то еще).
Другими словами, не переходите на testService
к виду. Вызов testService
из вида скрывает эту логику, делает просмотр более сложным и делает систему трудной для тестирования. Поскольку вы используете абстракцию ITestService
, я предполагаю, что вы хотите проверить свой код, но тестирование представления непросто (или, по крайней мере, не так просто, как вы можете протестировать контроллер).
Что нужно сделать, позвольте контроллеру вызвать testService
и собрать данные, необходимые для использования в режиме просмотра. Затем передайте эти данные (возможно, объединенные в один класс, модель представления) в представление.