Веб-API ASP.NET Core 2 - внедрение зависимостей

При использовании WEB API (только) есть ли разница между контроллером API и обычным веб-контроллером? Я имею в виду при добавлении такой службы с использованием одного из значений времени жизни:

  • services.AddSingleton<IService, Service();
  • services.AddScoped<IService, Service();
  • services.AddTransient<IService, Service();

будет ли различное поведение между службами в контроллере, который возвращает веб-страницу, или в контроллере, который возвращает JSON, поскольку REST не имеет состояния?


person user2818430    schedule 12.10.2017    source источник
comment
Нет, здесь нет никакой разницы.   -  person Kirk Larkin    schedule 12.10.2017


Ответы (1)


Да, до ASP.NET Core приложения были разделены между ASP.NET MVC и ASP.NET Web API.

ASP.NET Core изменил это. Теперь это один общий подход MVC (представленный промежуточным программным обеспечением MVC) для обработки запросов, независимо от того, возвращают ли они данные или представления.

Жизненный цикл не затрагивается, поскольку для всех запросов выполняется «одна и та же» реализация конвейера.

Например, вы можете создать действие контроллера, определенное для возврата данных динамического ответа:

    [HttpGet]
    public dynamic Index(int flag)
    {
        if (flag == 1) return new StatusCodeResult(200);
        if (flag == 2) return new { id = 1, Name = "some text" };
        else return View();
    }

Поэтому в зависимости от параметра запроса он вернет данные JSON, только код состояния в качестве ответа или просмотр. И во время создания экземпляра контроллера (когда некоторые зависимости могут быть разрешены через DI) инфраструктура еще не знает, какой поток будет использоваться.

person Set    schedule 12.10.2017
comment
Я знаю это. Возможно, мой вопрос был недостаточно ясным. Хотел узнать, есть ли разница в жизненном цикле сервисов, добавленных к DI. - person user2818430; 12.10.2017