В конечном счете это сводится к регистрации типа в контейнере. Такие как:
var builder = new ContainerBuilder();
builder.RegisterType<Bar>().As<IBar>();
var container = builder.Build();
Я предполагаю, что у вас есть аналогичный код, используя Builder где-то во время инициализации.
Есть несколько различных способов регистрации и настроить зависимости, времена жизни, перехватчиков и т.д., подробнее здесь: http://docs.autofac.org/en/latest/register/registration.html
После того, как все регистрируется, когда Autofac пытается создать экземпляр контроллера, он будет инспектировать конструктор вашего контроллера , и когда он найдет IBar
в качестве зависимости, он будет искать свою регистрацию контейнера и соответствующим образом создавать экземпляр.
То же самое применимо, когда он пытается создать экземпляр IBar
, он будет замечать IFoo
и IPanda
и повторить тот же процесс.
Главное отличие заключается в том, что Autofac поддерживает автоматическую регистрацию ваших контроллеров, чтобы избавить вас от необходимости регистрировать каждый из них вручную.
Таким образом, в конце концов, все это будет прикован таким образом, зависимости создаются по мере необходимости. Я стараюсь не использовать стиль создания экземпляра ServiceLocator, запрашивая зависимость напрямую и просто позволяя Autofac предоставлять зависимости во время построения.
Есть несколько шагов (http://docs.autofac.org/en/latest/integration/mvc.html) для интеграции Autofac в MVC. Где вы застряли? – Win
У меня встроенный Autofac; Мне интересно, как вводить зависимости в объекты, которые не являются контроллерами. –
Например, вводят Службу C с услугами A и B, поэтому C может делать свое дело. –