.NET 7 使用自带容器实现依赖注入
需安装nuget包:Microsoft.Extensions.Hosting
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; namespace ConsoleAppDI; public class Program { static void Main(string[] args) { /* // .NET 提供了一个内置的服务容器 IServiceProvider var builder = Host.CreateApplicationBuilder(args); builder.Services.AddHostedService<Worker>(); //builder.Services.AddSingleton<IMessageWriter, MessageWriter>(); builder.Services.AddSingleton<IMessageWriter, LoggingMessageWriter>(); using var host = builder.Build(); host.Run(); */ // 第二种DI容器构建方法! var host = Host .CreateDefaultBuilder(args) .ConfigureServices(services => { services.AddHostedService<Worker>(); services.AddSingleton<IMessageWriter, LoggingMessageWriter>(); }).Build(); host.Run(); } } /// <summary> /// 在依赖项注入术语中,服务:通常是向其他对象提供服务的对象,如 IMessageWriter 服务。 /// </summary> public interface IMessageWriter { public void Write(string message); } /// <summary> /// MessageWriter 是服务实现! /// </summary> public class MessageWriter : IMessageWriter { public void Write(string message) { Console.WriteLine($"{message}"); } } public class LoggingMessageWriter : IMessageWriter { private readonly ILogger<LoggingMessageWriter> _logger; public LoggingMessageWriter(ILogger<LoggingMessageWriter> logger) { _logger = logger; } public void Write(string message) { _logger.LogInformation($"Info: {message}"); } } public class Worker : BackgroundService { private readonly IMessageWriter _messageWriter; public Worker(IMessageWriter messageWriter) { _messageWriter = messageWriter; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { while (!stoppingToken.IsCancellationRequested) { _messageWriter.Write($"Worker running at: {DateTimeOffset.Now}"); await Task.Delay(2_000, stoppingToken); /* * info: ConsoleAppDI.LoggingMessageWriter[0] * Info: Worker running at: 2023/8/10 9:25:05 +08:00 */ } } }
运行结果: