Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WorkerService中配置_C#_.net Core_Dependency Injection - Fatal编程技术网

C# 在WorkerService中配置

C# 在WorkerService中配置,c#,.net-core,dependency-injection,C#,.net Core,Dependency Injection,在正常的.net核心服务中,模板将为我创建如下功能: public void Configure(IApplicationBuilder app) { ... } 在这里,我可以注入我的服务,并在启动时使用它们,例如,数据库预部署脚本 在worker服务模板中,此函数不是为我生成的,只是CreateHostbuilder函数 如何创建Configure()函数,或者在辅助服务中启动时使用类fire/construct?如果要注册接口或服务以便将其注入其他服务中,仍然可以在Configu

在正常的.net核心服务中,模板将为我创建如下功能:

public void Configure(IApplicationBuilder app)
{
    ...
}
在这里,我可以注入我的服务,并在启动时使用它们,例如,数据库预部署脚本

在worker服务模板中,此函数不是为我生成的,只是CreateHostbuilder函数


如何创建Configure()函数,或者在辅助服务中启动时使用类fire/construct?

如果要注册接口或服务以便将其注入其他服务中,仍然可以在
ConfigureServices
中注册服务

在下面的示例中,有两个服务注册为
Singleton
Transient

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureServices((hostContext, services) =>
            {
                services.AddHostedService<Worker>();
                services.AddSingleton<IEmployeeService, EmployeeService>();
                services.AddTransient<UserService>();
            });
公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
.ConfigureServices((主机上下文,服务)=>
{
services.AddHostedService();
services.AddSingleton();
services.AddTransient();
});

所以您希望配置服务,然后从控制台应用程序使用它们

从您的问题和评论中,您似乎了解如何配置服务

公共静态IHostBuilder CreateHostBuilder(字符串[]args)=>
Host.CreateDefaultBuilder(args)
...
.配置服务(配置服务);
公共静态void配置服务(HostBuilderContext上下文,IServiceCollection serviceCollection){
...
}
现在您有了几种使用这些服务的方法。您可以启动主机,然后获取服务并在主方法中使用它们。当您的工作完成且所有服务都已处理完毕时退出

公共静态异步任务主(字符串[]args)
{
使用(var host=CreateHostBuilder(args.Build())
{
等待host.StartAsync();
var lifety=host.Services.GetRequiredService();
var logger=host.Services.GetRequiredService();
...
stopplication();
wait host.waitForShutdownSync();
}
返回0;
}
或者,您可以通过实现
IHostedService
/
BackgroundService
来执行正在进行的任务。启动
IHost
时,每个已注册的
IHostedService
将按注册顺序启动,然后在主机关闭时停止/取消

公共静态异步任务主(字符串[]args)
{
使用(var host=CreateHostBuilder(args.Build())
{
等待host.RunAsync();
}
返回0;
}
公共静态void配置服务(HostBuilderContext上下文,IServiceCollection serviceCollection){
serviceCollection.AddHostedService();
}
公共课服务:背景服务{
公共服务(…){…}
受保护的覆盖异步任务ExecuteAsync(CancellationToken stoppingToken)
{
等待任务;
同时(!stoppingToken.IsCancellationRequested)
{
...
}
}
}
或者上述的一些组合


请注意,当您使用web主机时,实际启动web服务器的是
IHostedService
GenericWebHostedService
)。调用所有已注册的
istartupfilter
,包括调用
启动的方法。配置
方法来编译请求管道。

您的意思是要从控制台进程使用依赖项注入?提示,
.ConfigureServices(…)
不必是lambda。您可以定义一个静态方法。在
workerService
模板中没有配置方法,我不知道您为什么需要创建它?@osmanRahimi,因为我想在服务状态上构建一个类。所以您可以像以前一样使用
ConfigureServices