В ASP.NET Core у меня есть служба, которая готовится к внедрению при запуске:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IService, Service>();
        services.AddMvc();
    }

Если я сделаю вызов API, он запустится. Тем не менее, я хотел бы инициализировать его до того, как оно запустится. Я просто устанавливаю точку останова в контроллере, чтобы посмотреть, произойдет ли это.

3
Jim Layhey 21 Авг 2018 в 07:49

3 ответа

Лучший ответ

{ Метод {X0}} может принимать либо тип, либо объект для предоставления. Так что вы можете просто сделать:

public void ConfigureServices(IServiceCollection services)
{
    var serviceInstance = new Service();
    serviceInstance.DoWhatever();
    services.AddSingleton<IService, serviceInstance>();
    services.AddMvc();
}
3
Sami Kuhmonen 21 Авг 2018 в 04:57

Приложения ASP.NET Core используют автозагрузку class, которая по соглашению называется Startup. Startup класс:

  • При желании может включать метод ConfigureServices для настройки служб приложения.
  • Должен включать метод Configure для создания конвейера обработки запросов приложения.

ConfigureServices и Configure вызываются runtime при запуске приложения:

public class Startup
{
    // Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        ...
    }

    // Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
       ...
    }
}

Укажите класс Startup с помощью метода WebHostBuilderExtensions UseStartup:

public class Program
{
   public static void Main(string[] args)
   {
       CreateWebHostBuilder(args).Build().Run();
   }

   public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
      WebHost.CreateDefaultBuilder(args)
          **.UseStartup<Startup>();**
}

Поэтому, если вы хотите что-то вызвать при запуске проекта в Startup, поместите ваш метод в Confirgure

Удачи.

1
AmirReza-Farahlagha 21 Авг 2018 в 05:04

Вы можете попробовать поместить свою логику инициализации в конструктор, чтобы вам не пришлось беспокоиться о вызове «правильного метода». это также поможет вам в том случае, если ваш сервис зависит от другого для правильного функционирования. Да здравствует инъекция зависимости :)

0
uandrew 7 Сен 2018 в 15:42
51941734