7.1ASP.NET Core中的依赖注入

复制代码
// Add services to the container.
var assemblies = Assembly.Load(typeof(ModuleInitializer).Assembly.GetName()); //ReflectionHelper.GetAllReferencedAssemblies();//获取用户的所有程序集,代码过长,没有在这里给出
builder.Services.RunModuleInitializers(assemblies);//扫描指定程序集中所有实现了IModuleInitializer的类,并调用Initialize方法
using var sp = builder.Services.BuildServiceProvider();
var items = sp.GetServices<IMyService>();
foreach(var item in items)
{
    item.SayHello();
}
复制代码
复制代码
//创建接口和类
using System.Reflection;


public static class IServiceCollectionExtensions
{
    public static IServiceCollection RunModuleInitializers(this IServiceCollection services, Assembly assemblies)
    {
        //扫描所有程序集中实现了IModuleInitializer的类
        foreach (var implType in assemblies.GetTypes().Where(t => !t.IsAbstract && typeof(IModuleInitializer).IsAssignableFrom(t)))
        {
            //创建了ImoduleInitializer类
            var initializer = (IModuleInitializer?)Activator.CreateInstance(implType);
            initializer.Initialize(services);
        }
        return services;
    }
}
复制代码
复制代码
class ModuleInitializer : IModuleInitializer
{
    public void Initialize(IServiceCollection services)
    {
        services.AddScoped<IMyService, CnService>();//将CnService注册为IMyService的实现服务
    }
}

public interface IModuleInitializer
{
    public void Initialize(IServiceCollection services);
}
 
复制代码
复制代码
public interface IMyService
{
    void SayHello();
}

public class CnService : IMyService
{
    public void SayHello()
    {
        Console.WriteLine("你好");
    }
}
复制代码

只是通过读取程序集注入IServiceCollection容器中。记录下,防止以后要写的时候方便点。

posted @   vba是最好的语言  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示