问题标签 [microsoft.extensions.hosting]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
46 浏览

c# - IHostedService 多个实现的最佳实践

我有一个充当网关的应用程序,其中有两个进程,它们不断处理事件流。这两个进程都有启动和停止方法。他们通过事件队列相互交谈。

起初我想创建一个带有启动和停止方法的接口,因为这样我就可以注入一个 IEnumerable 并循环通过它来启动和停止。但后来我看到 IHostedService 与 StartAsync 和 StopAsync 有一个非常相似的接口。

将它们保持原样的利弊是什么,即一个 IHostedService 实现,它控制两个进程以及将我的进程转换为 IHostService 并注册两者的利弊

0 投票
2 回答
157 浏览

c# - 稍后在执行中更改服务实现(在 Microsoft.Extensions.DependencyInjection 中)

我有一个用例(带有登录的应用程序,然后是具有不同功能的各种页面进行导航),我在ConfigureServices方法中注册了我的大部分服务(就像通常那样),因此在我的实际(UI)执行之前程序。

然而,我有一些服务,我只注册为假人(甚至根本不注册),因为这些服务应该在我登录到 Web 服务后才设置。在这个登录过程中,不仅检查用户是否有效,而且在用户验证后得到各种配置数据。其中一些数据本身需要(例如用户货币),但其他数据用于确定应该使用哪个服务实现。甚至其他数据也被用作实现本身;意味着我通过 HTTP GET 获得一个对象的实例(实现特定的接口IMyInterface),并希望将此实例注册为IMyInterface.

然后应该将此配置数据(或相应的服务)添加回我的IServiceProvider,以便可以将它们注入到稍后将显示的页面中。这就是我的问题所在:

IServiceProvider在已经构建之后,有没有办法在运行时稍后添加服务实现?请记住,如果可能的话,我只想使用来自Microsoft.Extensions.DependencyInjection( IServiceCollection,IServiceProvider等) 的东西,而不是第三方容器(我知道这适用于例如 DryIoC)。如果我能够添加IOptionsIServiceProvider稍后的执行中,部分帮助是有帮助的,但我更有可能需要添加服务实现。

0 投票
0 回答
533 浏览

c# - System.Exception:找不到方法:'ILoggerFactory.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Extensions.Logging.LogLevel)'

我正在尝试将 .netcore 框架从 2.2 升级到 3.1 。但我也想在 3.1 中使用 IHostingEnvironment、IWebHostBuilder 和 AddNewtonsoftJson。(我知道它们应该被替换,但如果我这样做,将需要代码重构,我现在不需要)。

当我使用 swagger 执行 api 时,收到 500 错误消息:

无法解析 JSON。原始结果:System.Exception:找不到方法:'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory, Microsoft.Extensions.Logging.LogLevel)'。

这是堆栈跟踪的开始

失败:Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1] 执行请求时发生未处理的异常。System.MissingMethodException:找不到方法:'Microsoft.Extensions.Logging.ILoggerFactory Microsoft.Extensions.Logging.ConsoleLoggerExtensions.AddConsole(Microsoft.Extensions.Logging.ILoggerFactory,Microsoft.Extensions.Logging.LogLevel)'。

我只在 Program.cs 中配置 Logger。

appsettings.json 中的配置

我不明白为什么它不起作用。

注意:我在这个项目中有 6 个 API,其中 1 个成功完成上述更改,5 个失败并出现上述错误。

0 投票
0 回答
22 浏览

.net - 是否支持在单个进程中运行多个 .net 主机?

.net 通用主机状态的 .net文档

主机是封装应用程序资源和生命周期功能的对象

然而,它并没有说支持在单个进程中运行多个主机(即应用程序)。下面的代码运行得很好,并很好地终止了所有正在运行Host的 s 和服务Ctrl-C。但这只是一个非常简单的演示......

问题是:通用主机(或控制台主机或后台工作人员是否存在排除“单个进程中的多个主机”选项的限制?

使用以下简单的演示服务(为了完整起见,复制到这里)