未注册之前调试接口
问题是我没有注册IGlobalsystemService。
在program.cs中找到注册服务。
var builder = WebApplication.CreateBuilder(args);
...
// 配置相关
builder.Services.AddConfig();
builder的相关定义如下,其中对于这个问题我只需要关注IServiceCollection Services ,它的实例是一个IOC容器,那么我们IGlobalsystemService 这个服务依托于这个IOC容器来添加注册的。
注:IServiceCollection 的命名空间是Microsoft.Extensions.DependencyInjection;
// 摘要:
// Web 应用程序和服务的构建器。
public sealed class WebApplicationBuilder : IHostApplicationBuilder
{
// 摘要:
// 提供有关应用程序正在运行的 Web 托管环境的信息。
public IWebHostEnvironment Environment { get; }
//
// 摘要:
// 供应用程序组成的服务集合。这对于添加用户提供的或框架提供的服务非常有用。
public IServiceCollection Services { get; }
//
// 摘要:
// 应用程序的配置提供程序集合。这对添加新的配置源和提供程序非常有用。.
public ConfigurationManager Configuration { get; }
//
// 摘要:
// 供应用程序编写日志的日志提供程序集合。这对添加新日志记录提供程序非常有用。
public ILoggingBuilder Logging { get; }
//
// 摘要:
// Allows enabling metrics and directing their output.
public IMetricsBuilder Metrics { get; }
//
// 摘要:
// Microsoft.AspNetCore.Hosting.IWebHostBuilder 用于配置服务器特定属性,但不进行构建。要在配置后构建,请调用 Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build。
public ConfigureWebHostBuilder WebHost { get; }
// 摘要:
// 用于配置主机特定属性的 Microsoft.Extensions.Hosting.IHostBuilder,
// 但不构建。要在配置后构建,请调用 //Microsoft.AspNetCore.Builder.WebApplicationBuilder.Build。
public ConfigureHostBuilder Host { get; }
// 摘要:
// 构建 Microsoft.AspNetCore.Builder.WebApplication
//
// 返回结果:
// A configured Microsoft.AspNetCore.Builder.WebApplication.
public WebApplication Build();
}
既然知道了IServiceCollection是一个容器注册器,那么现在要知道如何添加服务了。
public static IServiceCollection AddConfig(this IServiceCollection service)
{
return service.AddHostedService<DbHostedService>()
.AddScoped<IGlobalSystemService, GlobalSystemService>();
}
和IServiceCollection同一命名空间的ServiceCollectionServiceExtensions和ServiceCollectionHostedServiceExtensions静态类都提供了相关的IServiceCollection方法,如下:
AddScoped静态方法
- 释义:添加服务——向指定的 Microsoft.Extensions.DependencyInjection.IServiceCollection 中添加服务类型为 serviceType(接口) 中指定的作用域服务(接口实现)。
- 隶属:ServiceCollectionServiceExtensions
- 参数1:this.当前对象,也就是说它应该被IServiceCollection类型对象调用
- 参数2:被注册的服务类型
- 参数3:注册的服务类型实现
AddHostedService静态方法
- 方法定义: 注册——为给定类型添加Microsoft.Extensions.Hosting.IHostedService 注册。
- 隶属:ServiceCollectionHostedServiceExtensions
- 给定类型:托管服务——要注册的 Microsoft.Extensions.Hosting.IHostedService。这里的给的类型是DbHostedService,是我们的数据库托管服务。
- 返回:原始的IServiceCollection。
添加GlobalSystemService后