如何在调用API之前启动注入服务?

问题描述 投票:3回答:3

在ASP.NET Core中,我有一个准备在启动时注入的服务:

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

如果我调用API,它将启动。但是,我希望它能在手前初始化(当应用程序启动时)。我只是在控制器中放置一个断点来查看是否会发生这种情况。

c# asp.net .net asp.net-core
3个回答
3
投票

AddSingleton方法可以采用类型或对象来给出。所以你可以简单地做:

public void ConfigureServices(IServiceCollection services)
{
    var serviceInstance = new Service();
    serviceInstance.DoWhatever();
    services.AddSingleton<IService, serviceInstance>();
    services.AddMvc();
}

1
投票

ASP.NET核心应用程序使用Startup class,按惯例命名为StartupStartup类:

  • 可以选择包含ConfigureServices方法来配置应用程序的服务。
  • 必须包含Configure方法才能创建应用程序的请求处理管道。

当应用程序启动时,ConfigureServicesConfigureruntime调用:

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)
    {
       ...
    }
}

使用WebHostBuilderExtensions UseStartup方法指定Startup类:

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

祝好运。


0
投票

您可以尝试将初始化逻辑放在构造函数中,这样您就不必担心调用“正确的方法”了。如果您的服务依赖于另一个服务以便正常运行,这也可以帮助您。长期依赖注入:)

© www.soinside.com 2019 - 2024. All rights reserved.