.Net6要使用一个服务(有时候是自己编写的类或服务),一般来说需要3个过程:
1.注册→2.配置→3.使用
举个例子,我们要想使用Swagger就必须按照这三个过程:
//1.注册服务
builder.Services.AddSwaggerGen();
//2.配置服务
builder.Services.ConfigureSwaggerGen(option => {//配置内容 });
var app = builder.Build();
//3.使用服务
app.UseSwagger();
app.UseSwaggerUI();
第一步的注册服务实际上就是实例化或者依赖注入DI,我们自己写的类也需要直接依赖注入到IServiceCollection中。
第二步实际上就是载入一些配置选项参数,这些参数可能在配置文件中,也可能直接写入程序代码中。
第三步就开始直接使用服务了。
当然你现在可能要问,我再用一些中间件时,并没有遇到这个情况啊,没有3步,只需要add就行了,比如NLog或Log4Net,就一句话:
builder.Logging.AddNLog("CfgFile/NLog.config");
builder.Logging.AddLog4Net("CfgFile/Log4Net.config");
但是你看一下代码就明白里面是啥样的了,翻看后台代码如下:
public static ILoggingBuilder AddLog4Net(this ILoggingBuilder builder, string log4NetConfigFile)
{
Log4NetProviderOptions options = new Log4NetProviderOptions(log4NetConfigFile);
return builder.AddLog4Net(options);
}
而这个ILoggingBuilder 的定义是:
// 摘要:
// An interface for configuring logging providers.
public interface ILoggingBuilder
{
// 摘要:
//Gets the Microsoft.Extensions.DependencyInjection.IServiceCollection where Logging
//services are configured.
IServiceCollection Services { get; }
}
这就很明显了,options是实例化,而读取CfgFile/NLog.config配置文件就是配置服务,最后实现ILoggingBuilder是为了添加实例化的对象从而使用这个服务。还是老套路,
1.注册(实例化或依赖注入),IServiceCollection作为依赖注入容器,将服务注入到容器中。
2.配置(载入配置文件或写入程序),需要实现IServiceCollection的configure方法,配置容器中的服务。
3.使用服务,有时候也可以在这里配置一下服务。