Ответы пользователя по тегу ASP.NET
  • В чем смысл метода CreateScope, какие преимущества он дает?

    @lil_Toady
    Есть три типа срока жизни объектов в DI контейнере (по крайней мере от Microsoft, который тут рассматривается):
    - Singleton - Объект создается только один раз на срок жизни программы, соответственно все кто его запросил получат одну и ту же сущность;
    - Scoped - Объект создается только один раз в пределах скоупа, и эта сущность будет передаваться всем кто ее запрашивал в пределах этого скоупа , а после этого удаляется (и вызывается Dispose, если внедрен интерфейс IDisposable);
    - Transient - Объект создается по каждому запросу, то есть DI всегда будет подсовывать новую сущность;

    Это механизм изоляции и ограничения срока жизни объекта. Если рассматривать ASP.NET, то каждый запрос к серверу обрабатывается в своем скоупе.
    Ответ написан
    Комментировать
  • Как DI резолвится в .ctor'е контроллера?

    @lil_Toady
    Не очень понятен вопрос.
    Если про то как DI понимает какую имплементацию использовать - все просто, вы сами ее и указываете для конкретного интерфейса.
    А если вам интересно как DI понимает что передать в конструктор: через рефлексию, в Type есть метод GetConstructors() - получить список ConstructorInfo, описывающих каждый из задекларированных конструкторов. Далее можно получить список параметров (ParameterInfo) через GetParameters() и найти тот, все типы параметров которого известны DI, инстанциировать их и затем уже инстациировать запрошеный класс, как например контроллер, используя, например, Activator.CreateInstance куда передается тип нужного нам класса и список аргументов.
    Ответ написан
    2 комментария