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容器中。记录下,防止以后要写的时候方便点。