在下面的 case 中,我不理解DI的行为.
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;
using Microsoft.Extensions.Azure;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Azure.Identity;
namespace TestResults.Processor;
internal class Program
{
private static async Task Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.AddEnvironmentVariables()
.Build();
var services = new ServiceCollection();
services.AddLogging(configure =>
{
configure.AddConfiguration(configuration.GetSection("Logging"));
configure.AddConsole();
});
services.ConfigureAndInjectServices(configuration);
using var serviceProvider = services.BuildServiceProvider();
var logger = serviceProvider.GetRequiredService<ILogger<Program>>();
logger.LogInformation($"serviceBusFqns: ....");
logger.LogInformation($"serviceBusFqns: ....");
}
}
public static class DependencyInjectionHelper
{
public static void ConfigureAndInjectServices(this IServiceCollection services, IConfigurationRoot configuration)
{
var serviceBusFqns = configuration.GetValue<string>("ServiceBus:FullyQualifiedNs");
var managedIdentityClientID = configuration.GetValue<string>("ServiceBus:ManagedIdentityClientID");
services.AddAzureClients(builder =>
{
builder.AddServiceBusClientWithNamespace(serviceBusFqns);
builder.UseCredential(new DefaultAzureCredential());
});
}
}
我可以看到控制台上生成的日志(log).但如果我调换这些行的顺序:
services.ConfigureAndInjectServices(configuration);
services.AddLogging(configure =>
{
configure.AddConfiguration(configuration.GetSection("Logging"));
configure.AddConsole();
});
日志(log)不再记录(到控制台).为什么?