如何为BackgroundService传递参数?

2024-03-18

我阅读了有关 ASP.net core 2.2 的内容,并找到了有关通用主机的参考资料。

我尝试在示例下使用 backgroundService 创建控制台应用程序:https://github.com/aspnet/AspNetCore.Docs/tree/master/aspnetcore/fundamentals/host/generic-host/samples/ https://github.com/aspnet/AspNetCore.Docs/tree/master/aspnetcore/fundamentals/host/generic-host/samples/

var param = Console.ReadLine();

var host = new HostBuilder().ConfigureServices((hostContext, services) =>
{
   services.AddHostedService<MyCustomSerivce>();
}

问题是如何从命令行传递参数(在我的例子中为“param”),这将指定特定后台服务中的内部逻辑。


为了解析服务,您需要将参数注册到服务集合中。

  1. 存储参数的服务

    public class CommandLineArgs
    {
        public string Args { get; set; }
    }
    
  2. 注册参数

    public class Program
    {
        public static async Task Main(string[] args)
        {
            var param = Console.ReadLine();
    
            var host = new HostBuilder()
                .ConfigureHostConfiguration(configHost =>
                {
                    configHost.SetBasePath(Directory.GetCurrentDirectory());
                    configHost.AddJsonFile("hostsettings.json", optional: true);
                    configHost.AddEnvironmentVariables(prefix: "PREFIX_");
                    configHost.AddCommandLine(args);
                })
                .ConfigureAppConfiguration((hostContext, configApp) =>
                {
                    configApp.AddJsonFile("appsettings.json", optional: true);
                    configApp.AddJsonFile(
                        $"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", 
                        optional: true);
                    configApp.AddEnvironmentVariables(prefix: "PREFIX_");
                    configApp.AddCommandLine(args);
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddSingleton(new CommandLineArgs { Args = param });
                    services.AddHostedService<LifetimeEventsHostedService>();
                    services.AddHostedService<TimedHostedService>();
                })
                .ConfigureLogging((hostContext, configLogging) =>
                {
                    configLogging.AddConsole();
                    configLogging.AddDebug();
                })
                .UseConsoleLifetime()
                .Build();
    
            await host.RunAsync();
        }
    }
    
  3. 解决服务

    internal class TimedHostedService : IHostedService, IDisposable
    {
        private readonly ILogger _logger;
        private Timer _timer;
        private readonly IConfiguration _configuration;
        private readonly CommandLineArgs _commandLineArgs;
        public TimedHostedService(ILogger<TimedHostedService> logger
            , IConfiguration configuration
            , CommandLineArgs commandLineArgs)
        {
            _logger = logger;
            _configuration = configuration;
            _commandLineArgs = commandLineArgs;
        }       
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何为BackgroundService传递参数? 的相关文章

  • std::list::clear 是否会使 std::list::end 迭代器无效?

    检查这个代码 include stdafx h include
  • Nullable 是不可能的,为什么不呢? [复制]

    这个问题在这里已经有答案了 如果这是一个愚蠢的问题 请原谅 我正在尝试更好地理解 Net 中的 Nullable 类型 从我从 Microsoft 源代码 使用 ReSharper 中注意到的内容 我了解到 Nullable 是一个结构 而
  • 通过 SOAP 的 Gmt php 或 UTC C# 等效项

    is C DateTime UtcNow和 PHPdate c 是等价的 我怀疑 因为当我肥皂时 我得到了 C
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • OpenGL缓冲区更新[重复]

    这个问题在这里已经有答案了 目前我正在编写一个模拟水的程序 以下是我所做的步骤 创建水面 平面 创建VAO 创建顶点缓冲区对象 在其中存储法线和顶点 将指针绑定到此 VBO 创建索引缓冲区对象 然后我使用 glDrawElements 渲染
  • .pdbs 会减慢发布应用程序的速度吗?

    如果 dll 中包含 pdb 程序调试 文件 则行号将出现在引发的任何异常的堆栈跟踪中 这会影响应用程序的性能吗 这个问题与发布与调试 即优化 无关 这是关于拥有 pdb 文件的性能影响 每次抛出异常时都会读取 pdb 文件吗 加载程序集时
  • 如何调整 Windows 窗体以适应任何屏幕分辨率?

    我知道这是重复的问题 但我检查了所有其他相关问题 他们的答案没有帮助 结果仍然与屏幕截图 2 中所示相同 我是 C Windows 窗体新手 如截图1所示 我有Form1有一些控件 每组控件都放在一个面板中 我在 PC1 中设计了应用程序
  • 具有多个谓词的 C++11 算法

    功能如std find if来自algorithmheader 确实很有用 但对我来说 一个严重的限制是我只能为每次调用使用 1 个谓词count if 例如给定一个像这样的容器std vector我想同时应用相同的迭代find if 多个
  • MSMQ接收和删除

    是否有任何选项可以在读取消息后将其从 MSMQ 中删除 比如 接收 删除可以作为原子操作运行吗 听起来您想查看下一条消息 然后在处理完成后接收它 Message message Queue Peek Queue ReceiveById me
  • DataGridView 列中的数字文本框

    我有一个DataGridView 我想要它的第一列或任何所需的列 其中有textboxes在其中 成为NUMERIC ONLY 我目前正在使用这段代码 private void dataGridViewItems EditingContro
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 如何调试在发布版本中优化的变量

    我用的是VS2010 我的调试版本工作正常 但我的发布版本不断崩溃 因此 在发布版本模式下 我右键单击该项目 选择 调试 然后选择 启动新实例 此时我看到我声明的一个数组 int ma 4 1 2 8 4 永远不会被初始化 关于可能发生的事
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • WinForms - 加载表单时如何使用 PaintEventArgs 运行函数?

    我试图理解图形 在 Graphics FromImage 文档中 它有这样的示例 private void FromImageImage PaintEventArgs e Create image Image imageFile Image
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • 当 Verb="runas" 时设置 ProcessStartInfo.EnvironmentVariables

    我正在开发一个 C 应用程序 我需要创建变量并将其传递给新进程 我正在使用ProcessStartInfo EnvironmentVariables 新进程必须提升运行 因此我使用 Verb runas var startInfo new
  • 在二进制数据文件的标头中放入什么

    我有一个模拟 可以读取我们创建的大型二进制数据文件 10 到 100 GB 出于速度原因 我们使用二进制 这些文件依赖于系统 是从我们运行的每个系统上的文本文件转换而来的 所以我不关心可移植性 当前的文件是 POD 结构的许多实例 使用 f
  • 使用 boost 异步发送和接收自定义数据包?

    我正在尝试使用 boost 异步发送和接收自定义数据包 根据我当前的实现 我有一些问题 tcpclient cpp include tcpclient h include
  • 如何在c中断言两个类型相等?

    在 C 中如何断言两种类型相等 在 C 中 我会使用 std is same 但搜索 StackOverflow 和其他地方似乎只能给出 C 和 C 的结果 在C中没有办法做到这一点吗 请注意 这不是询问变量是否具有某种类型 而是询问两个类

随机推荐

  • 在 Linux 上以编程方式获取准确的 CPU 缓存层次结构信息

    我试图获得 Linux 上当前 CPU 的数据缓存层次结构的准确描述 不仅是各个 L1 L2 L3 可能还有 L4 数据缓存的大小 还包括它们在不同系统之间分割或共享的方式核心 例如 在我的 CPU AMD Ryzen Threadripp
  • data.table 的“i”表达式中不存在(可能的错误)[重复]

    这个问题在这里已经有答案了 When i包含NA 不会返回该特定行 我不确定这是预期的行为还是真的 require data table x data table a c NA 1 3 NA x a gt 0 a 1 1 2 2 3 3 x
  • 如何更改android studio操作语言

    我是中国人 不太习惯android studio的默认语言 我知道这个问题的关键是resources en jar 文件 我已经解压了包裹 但我不知道下一步该做什么 如何更改语言 要更改语言 请按照下列步骤操作 解压Android Stud
  • 当实例变量呈现为数组列表时类的不变性

    我有一个不可变的类 假设我有一个 ArrayList 类型的成员变量的 getter 方法 在这种情况下 当我获得对该变量的引用时 我可以从中添加或删除一个元素 在这种情况下 不变性似乎受到了侵犯 谁能详细解释一下这个概念 你确实是对的 违
  • Response.Redirect 在 Global.asax 中不起作用

    我创建了一个错误页面来显示所有未处理异常的一般消息 这是Global asax中的代码 HttpContext ctx HttpContext Current string e404 PAGE ctx Request AppRelative
  • 无法读取未定义的“xxx”属性

    我使用的是 Ionic 2 其中一个组件有两个组件 并且使用发射器共享数据 但是当我执行程序时 却出现了这个错误 未捕获的运行时错误 承诺中 TypeError 无法读取属性 未定义类型错误的 BillNo 无法读取属性 BillNo 在
  • 如何使用 git diff -G?

    我正在编写一个小测试套件 该套件运行要在一堆输入文件上进行测试的工具 对于每个输入文件 该工具都会创建相应的输出文件 两者都是 XML 格式 输入和输出文件在 Git 存储库上签入 输出文件带有工具编译时的时间 因此输出文件在被测试工具重新
  • 时间:2019-03-17 标签:c#winform

    我有一个学校项目 我需要创建一个 Windows 窗体应用程序 但就我而言 我需要创建一个控制台应用程序 现在我可以通过按钮从窗口打开控制台 以及一些我不完全理解的代码 但是是否可以在打开win窗体的同时打开控制台 2 控制台可以粘在win
  • Mysql 选择每次出现的 (n) 行[重复]

    这个问题在这里已经有答案了 可能的重复 mysql 在 GROUP BY 中使用 LIMIT 来获取每组 N 个结果 https stackoverflow com questions 2129693 mysql using limit w
  • 在文件中写入特殊字符

    我正在尝试将数据写入 eps 文件 这是我的代码 header Content Type text html charset utf 8 var echo var file test eps file put contents file v
  • 如何在 VS Code 中使用 Windows 内置的 OpenSSH ssh-agent,而不是 Git bash 的?

    我在 Windows 上运行 OpenSSH 使用自秋季 秋季创作者更新以来包含内置 OpenSSH https learn microsoft com en us windows server administration openssh
  • 迁移 NDB 模型属性的正确方法

    我目前在 NDB 中有一个模型 我想更改属性名称而不必接触 NBD 假设我有以下内容 from google appengine ext import ndb class User ndb Model company ndb KeyProp
  • Neo4j 索引创建失败

    我目前正在了解 Neo4j 和图形数据库的功能 我还做了neo4j附带的电影教程 现在我必须处理一个大型数据库 135 GB 500 个 mio nodes 950 个 mio relationships 并且想要为特殊类型的节点添加索引
  • 为什么 this 不能作为成员函数中的默认参数传递?

    我试图将当前的 le ngth 值作为默认参数作为函数参数传递 但编译器显示错误 在此上下文中不得使用 this 谁能告诉我我犯了什么错误 class A private int length public A void display i
  • 在node.js中,全局对象(或头对象)有名称吗?

    如果环境是浏览器 那么我们可以使用 测试this关键字指向window对象 也是全局对象 或者有些书称其为 头对象 如果在node js中 有没有类似这样的名字呢 window 以便 console log this globalObjec
  • 确定线斜率变化的位置(算法)

    如果你绘制下面的数字 你会得到一个 波动性微笑 数字遵循一个线性斜率 左斜率 然后更改为 遵循另一个线性斜率 右斜率 我有几组这样的数据 想知道斜率在哪里 变化 笔记 斜率变化通常发生在点之间 不知道有多少个点有左斜率 有多少个有 正确的斜
  • java 如何打开另一个目录中的文件?

    如何打开不在当前目录中但在另一个目录中的文件 例如 我有一个文件夹 F test 我的文件位于 F test test2 doit txt 和 D test3 doit2 txt 创建文件对象时在参数路径中输入的内容如下 File f ne
  • XSLT - 将前同级元素与当前节点元素进行比较

    我有这个 XML 文件
  • JavaFX 如何滚动 ScrollPane 以使节点位于视口中间?

    我必须创建显示当前时间的时间线 我正在使用 AnchorPane 并将添加的行放置在 ScrollPane 中 我需要模拟1天 滚动窗格宽度为 2880px 每60px为一小时 我的限制是 前一天 12 小时 第二天 12 小时 移动我的线
  • 如何为BackgroundService传递参数?

    我阅读了有关 ASP net core 2 2 的内容 并找到了有关通用主机的参考资料 我尝试在示例下使用 backgroundService 创建控制台应用程序 https github com aspnet AspNetCore Doc