繁体   English   中英

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

[英]How to start an injected service before a call has been made to the API?

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

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

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

AddSingleton方法可以使用类型或对象来提供。 所以你可以简单地做:

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

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

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

应用程序启动时, runtime时调用ConfigureServicesConfigure

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>();**
}

因此,如果您想在StartupStartup项目时调整某些内容,请将您的方法放在Confirgure

祝好运。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM