winservice启动后是否可以注入依赖项?

问题描述

我有可以作为 winservice 启动的 ASP.NET Core 3.1 WebAPI。

public class Program
{
    public static async Task Main(string[] args)
    {
        IHostBuilder builder = CreateHostBuilder(args);

        if (isService)
        {
            Directory.SetCurrentDirectory(AppDomain.CurrentDomain.BaseDirectory);
            var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
            var pathToContentRoot = Path.GetDirectoryName(pathToExe);
            builder.UseContentRoot(pathToContentRoot);
            builder.ConfigureServices((hostContext,services) => services.AddSingleton<IHostLifetime,ServiceBaseLifetime>());
        }

        var host = builder.Build();

        if (isService)
        {
            await host.RunAsync();
        }
        else
        {
            host.Run();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args)
    {
        return Host.CreateDefaultBuilder(args)
             .ConfigureWebHostDefaults(webBuilder =>
             {
                 webBuilder.UseContentRoot(Directory.GetCurrentDirectory());
                 webBuilder.ConfigureAppConfiguration((hostingContext,config) =>
                 {
                     var env = hostingContext.HostingEnvironment;
                     config.AddEnvironmentvariables();
                     if (args != null)
                     {
                         config.AddCommandLine(args);
                     }
                 });
                 webBuilder.UseStartup<Startup>();
                 webBuilder.UseKestrel(options =>
                 {
                     options.Listen(IPAddress.Parse("0.0.0.0"),port,listenoptions =>
                     {
                         listenoptions.UseHttps("cert.pfx","password");
                     });
                 });
             });
    }
}

使用 winservice ServiceBaseLifetime 类启动它。它有方法 OnStart、OnStop(来自 IHostLifetime)。

Startup.cs 中的所有注入完成后启动服务。 但是我在 Startup.cs 中有一个长时间运行的操作,其结果决定了要注入的依赖项。 因此,有时 winservice 会启动很长时间,并且出现超时错误。 我可以通过将 ServicesPipeTimeout 添加注册表来增加超时,它可以工作。 但我想用另一种方式解决这个问题。

是否可以启动windows服务,然后执行长时间运行的操作,完成后在Startup之外注入所需的依赖项?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)