记得之前做OTA的项目组内的同事用了autofac 的组件做IOC容器注入业务服务。由于我们的项目都迁移到了.Net8 以上看了微软自带的IOC容器组件跟autofac的差别不是很大所以使用一下微软自带的Microsoft.Extensions.DependencyInjection 的组件库。本文记录一下简单的使用方法。二、使用创建新的控制台应用程序创建使用依赖项注入的 .NET 控制台应用生成和配置 通用主机编写多个接口和相应的实现使用服务生存期和 DI 的范围Project SdkMicrosoft.NET.Sdk PropertyGroup OutputTypeExe/OutputType TargetFrameworknet8.0/TargetFramework ImplicitUsingsenable/ImplicitUsings Nullableenable/Nullable /PropertyGroup ItemGroup PackageReference IncludeMicrosoft.Extensions.Hosting Version10.0.1 / /ItemGroup /Project添加接口public interface IMessage { void Message(string message); }添加实现public class WutyMessage : IMessage { public void Message(string message) { Console.WriteLine(${nameof(WutyMessage)}Write:{message}); } }添加执行调用类添加需要DI的服务/// summary /// 测试调用中间件微服务 /// /summary public class TestExcuter { private IMessage _message; public TestExcuter(IMessage message) { this._message message; Console.WriteLine(构造函数获取到了message参数); } public void Excuter() { _message.Message($TestExcuter 执行了IMessage的方法了,{DateTime.Now}); Console.WriteLine($TestExcuter 执行完毕); } }注册 DI 的服务// See https://aka.ms/new-console-template for more information using Microsoft.Extensions.Hosting; using System.ComponentModel; using DiDemo; using Microsoft.Extensions.DependencyInjection; Console.WriteLine(Hello, World!); HostApplicationBuilder builder Host.CreateApplicationBuilder(args); builder.Services.AddTransientTestExcuter(); builder.Services.Add(ServiceDescriptor.TransientIMessage,WutyMessage()); using IHost host builder.Build(); ExemplifyServiceExcuter(host.Services); host.Run(); //执行调用 static void ExemplifyServiceExcuter(IServiceProvider hostProvider) { using IServiceScope serviceScope hostProvider.CreateScope(); IServiceProvider provider serviceScope.ServiceProvider; //获取注册的服务 TestExcuter testExcuter provider.GetRequiredServiceTestExcuter(); testExcuter.Excuter(); Console.WriteLine(); } Console.ReadKey();执行的结果结论1、每个services.Add{LIFETIME}{SERVICE}扩展方法都会添加并可能配置服务。 我们建议应用遵循此约定。 除非要创作官方Microsoft包否则不要在 Microsoft.Extensions.DependencyInjection 命名空间中放置扩展方法。 命名空间中Microsoft.Extensions.DependencyInjection定义的扩展方法在 IntelliSense 中显示无需更多using指令。减少using或Program类中通常调用这些扩展方法所需的Startup指令数。2、应用IHostApplicationBuilder使用主机生成器设置创建实例。配置服务将它们与对应的服务生命周期一起添加。调用 Build() 并分配一个 IHost 实例。调用ExemplifyServiceLifetime传入IHost.Services。Transient 服务始终不同。 每次检索服务时都会创建一个新实例。Scoped 服务仅随新范围更改但在范围内是同一实例。Singleton 服务始终相同。 仅创建一次新实例。