作者:oo欣呐呐 | 来源:互联网 | 2023-07-14 15:39
问题1、使用Assembly.Load加载程序集反射注入DIvarpathAppDomain.CurrentDomain.BaseDirectory;varassesnewList
问题
1、使用Assembly.Load加载程序集
//反射注入DI
var path = AppDomain.CurrentDomain.BaseDirectory;
var asses = new List();
var files = Directory.GetFiles(path, "*.dll");
for (int i = 0; i {
asses.Add(Assembly.Load(File.ReadAllBytes(files[i])));
}
2、循环遍历类,发现符合条件的类使用AddScoped方法注入DI,举例类名为LoginContext
for (int i = 0; i {
var modules = asses[i].GetModules();
for (int j = 0; j {
var types = modules[j].GetTypes();
for (int m = 0; m {
var service = types[m];
if (可注入条件)
{
services.AddScoped(service);//项目不可正常启动
services.AddScoped(typeof(LoginContext));//项目正常启动
services.AddScoped();//项目正常启动
}
}
}
}
3、services内容
4、使用构造函数注入的方式
5、错误信息
只保留services.AddScoped(service);启动项目时会报错:
Unable to resolve service for type
不知道错误原因是什么,services.AddScoped()和services.AddScoped()的注入效果不应该是一样的吗?
最佳回答
LoginContext 是啥呢
我们通常实现类似这样:
参考: