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