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

3
在ASP.NET Core中,我有一个服务在启动时准备进行注入:
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IService, Service>();
        services.AddMvc();
    }

如果我调用API,它将启动。 但是,我希望在应用程序启动之前进行初始化。 我只是在控制器中设置断点,以查看是否发生这种情况。

1
为什么在拨打电话之前你想要启动你的创业公司? - AmirReza-Farahlagha
1
根据您的 IService 所做的事情,这可能是一个非常糟糕的想法。 - Erik Philips
@ErikPhilips 我正在原型化一个服务总线接收器,我需要从头开始运行它。它在API中的原因是为了让我可以与之交互。 - Jim Layhey
3个回答

4

AddSingleton方法可以接受类型或对象作为参数。因此,您可以简单地执行以下操作:

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

1
ASP.NET Core 应用程序使用 Startup 类来创建应用程序,根据惯例,该类的名称为 Startup。Startup 类包括以下内容:
  • 可以选择包含 ConfigureServices 方法以配置应用程序的服务。
  • 必须包含 Configure 方法以创建应用程序的请求处理管道。
当应用程序启动时,运行时会调用 ConfigureServices 和 Configure 方法。
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方法来指定启动类:
public class Program
{
   public static void Main(string[] args)
   {
       CreateWebHostBuilder(args).Build().Run();
   }

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

如果您想在项目启动时调用某些内容,请将您的方法放在Configure中。

祝您好运。


0

你可以尝试将初始化逻辑放在构造函数中,这样你就不必担心调用“正确的方法”。这也有助于当你的服务依赖于另一个服务才能正常运行时。依赖注入万岁 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接