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 @ 2023-05-17 12:30  vba是最好的语言  阅读(20)  评论(0编辑  收藏  举报