Конструктор контроллера:
IRestaurantData db;
public HomeController(IRestaurantData db)
{
this.db = db;
}
// Код контейнера
public class ContainerConfig
{
internal static void RegisterContainer(HttpConfiguration httpConfiguration)
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterApiControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<InMemoryRestaurantData>()
.As<IRestaurantData>()
.SingleInstance();
var container = builder.Build();
// MVC CONTROLLER VERSION
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
// WEBAPI CONTROLLER VERSION
httpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
}
Поэтому я пытаюсь обернуть голову, как работают контейнеры Inversion of Control. Конечно, я использую Autofa c для создания этих контейнеров. Из того, что я в настоящее время понимаю, создание этого контейнера делает его таким, чтобы при создании экземпляра моего HomeController с IRestaurantData контейнер указывал на интерфейс AT InMemoryResataurantData при каждом его использовании. Я могу это понять. Что меня также смущает, так это то, что я не понимаю, ГДЕ в программе создаются мои контроллеры? Кто-нибудь знает?