8.7非依赖注入环境
在 ASP.NET Core 或 Worker Service 等应用程序中,通常内置了依赖注入支持。你只需在 Startup.cs 或 Program.cs 文件中,通过 services 或 builder.Services 注册所需服务即可。
在 ASP.NET Core 或 Worker Service 等应用程序中,通常内置了依赖注入支持。你只需在 Startup.cs 或 Program.cs 文件中,通过 services 或 builder.Services 注册所需服务即可。
但在某些特定场景下,例如控制台应用(Console)、WinForms 或 WPF 项目中,.NET 并未默认集成完整的依赖注入容器。针对这些场景,您可以使用 HttpRemoteClient 静态类的 Service 属性来发起远程 HTTP 请求:
var result = await HttpRemoteClient.Service.GetAsStringAsync("https://furion.net/");自定义配置 HTTP 远程请求服务#
如果需要自定义配置 HTTP 远程请求服务,可以通过调用 HttpRemoteClient.Configure(services => {}) 方法进行设置:
HttpRemoteClient.Configure(services =>{ // 示例:配置默认的 HttpClient services.AddHttpClient(string.Empty).AddProfilerDelegatingHandler(); // 如需自定义 HTTP 远程请求服务,可通过调用 AddHttpRemote() 进行配置;默认情况下无需注册 ⚠️ // services.AddHttpRemote();});完成自定义配置后,HttpRemoteClient.Service 静态属性将自动使用最新的服务构建信息实例。
与应用程序依赖注入容器共享实例#
虽然 HttpRemoteClient 主要面向非依赖注入场景,但也允许注入应用程序自身的根服务容器,使其与现有依赖注入体系共享同一个 IHttpRemoteService 实例。这在已经构建好 IServiceProvider 的任意应用中(包括 Console、WinForms、WPF、Worker Service 及 ASP.NET Core 等)均可使用。
在通用主机、Worker Service 或控制台应用中#
在已经构建出 IHost 或 IServiceProvider 的场景下,直接调用 UseHttpRemoteClient 扩展方法注入根容器即可:
// 以 Worker Service 为例var builder = Host.CreateApplicationBuilder(args);builder.Services.AddHttpRemote();var host = builder.Build();// 注入根容器host.Services.UseHttpRemoteClient();var result = await HttpRemoteClient.Service.GetAsStringAsync("https://furion.net/");在 ASP.NET Core 应用中#
提供了专门的 UseHttpRemoteClient 扩展方法,可在 Program.cs 中一行注入:
var builder = WebApplication.CreateBuilder(args);builder.Services.AddHttpRemote();var app = builder.Build().UseHttpRemoteClient(); // 将根容器注入 HttpRemoteClientapp.Run();此后,HttpRemoteClient.Service 与 app.Services.GetRequiredService<IHttpRemoteService>() 返回的实例完全相同,不再维护独立的内部容器。
除了使用 HttpRemoteClient 静态类提供的 Service 属性外,您还可以选择手动构建服务容器并从中解析 IHttpRemoteService 实例,示例如下:
// 创建一个新的 ServiceCollection 实例var services = new ServiceCollection();// 向 ServiceCollection 中添加所需的 HTTP 远程请求服务services.AddHttpRemote();// 构建 ServiceProvider 实例using var provider = services.BuildServiceProvider();// 从 ServiceProvider 中获取 IHttpRemoteService 实例var httpRemoteService = provider.GetRequiredService<IHttpRemoteService>();这种方式适用于需要完全控制依赖注入容器生命周期的场景。如果希望 HttpRemoteClient.Service 也与手动构建的容器共享服务实例,请使用 provider.UseHttpRemoteClient() 注入该容器,而不是分别创建。