





















还记得之前做OTA的项目,组内的同事用了autofac 的组件做IOC容器注入业务服务。由于我们的项目都迁移到了.Net8 以上,看了微软自带的IOC容器组件跟autofac的差别不是很大,所以使用一下微软自带的Microsoft.Extensions.DependencyInjection 的组件库。本文记录一下简单的使用方法。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net8.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.Extensions.Hosting" Version="10.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}"); } }
/// <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 执行完毕!"); } }
// 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.AddTransient<TestExcuter>(); builder.Services.Add(ServiceDescriptor.Transient<IMessage,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.GetRequiredService<TestExcuter>(); testExcuter.Excuter(); Console.WriteLine(); } Console.ReadKey();

1、每个 services.Add{LIFETIME}<{SERVICE}> 扩展方法都会添加(并可能配置)服务。 我们建议应用遵循此约定。 除非要创作官方Microsoft包,否则不要在 Microsoft.Extensions.DependencyInjection 命名空间中放置扩展方法。 命名空间中 Microsoft.Extensions.DependencyInjection 定义的扩展方法:
using 指令。using或Program类中通常调用这些扩展方法所需的Startup指令数。2、应用:
ExemplifyServiceLifetime,传入IHost.Services。1、使用依赖关系注入 - .NET | Microsoft Learn
2、依赖关系注入 - .NET | Microsoft Learn
3、WPF 依赖注入 Microsoft.Extensions.DependencyInjection .NET - 超级无敌美少男战士 - 博客园
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。