需安裝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 */ } } }
運行結果: