Как на самом деле работают контроллеры Io C? В частности, в NET MVC? - PullRequest
0 голосов
/ 11 апреля 2020

Конструктор контроллера:

    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 при каждом его использовании. Я могу это понять. Что меня также смущает, так это то, что я не понимаю, ГДЕ в программе создаются мои контроллеры? Кто-нибудь знает?

1 Ответ

0 голосов
/ 11 апреля 2020

Это делает автофа c. всякий раз, когда вы запрашиваете класс из контейнера, он создает для вас экземпляр типа, используя конструктор по умолчанию. Если у вас есть конструктор с параметрами, он будет искать в контейнере другие зарегистрированные типы и создавать новый объект или извлекать уже использованный объект.

Ваши созданные экземпляры могут быть временными (кратковременными) или нет.

Итак, вкратце; когда объект запрашивается.

...