c# - 如何从另一个程序集将 DBContext 添加到服务
问题描述
在 .net core 2.1 上,我已经使用
services.AddMvcCore().AddApplicationPart([Assembly])
但是程序集包含它的 DB 上下文,问题是我无法从程序集中加载 DBContext,以加载控制器的类似方式。通常我们使用添加数据库上下文
services.AddDbContext<[DBCOntextType]>([options]);
我无法使用反射将类型传递给此函数(AddDBContext),如下所示:
System.Reflection.MethodInfo method = services.GetType().GetMethod("AddDbContext",System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static);
方法变量始终为空。
此外,如果程序集包含 startup.cs 文件,我将无法在启动主应用程序的同时运行此启动。
如果有解决办法请告诉我谢谢
解决方案
解决方案是反射解决方案,因为@thehenny 将我引导到正确的方向
这是假设您已经从程序集中加载了类型 dbContextType 的代码
var type = typeof (Microsoft.Extensions.DependencyInjection.EntityFrameworkServiceCollectionExtensions);
System.Reflection.MethodInfo method = type.GetMethods().Where(i=>i.Name == "AddDbContext"
&& i.IsGenericMethod==true).FirstOrDefault();
System.Reflection.MethodInfo generic = method.MakeGenericMethod(dbContextType);
Action<DbContextOptionsBuilder> action = new Action<DbContextOptionsBuilder>(options =>[Your Options]);
object[] parametersArray = new object[] { services, action,null,null };
generic.Invoke(services, parametersArray);
推荐阅读
- python-3.x - 重新采样后尝试返回索引列表
- html - 有没有办法在 Shadow-DOM 中访问 CSS 中的 HTML 标签属性?
- php - 如何使用页面模型获取表单字段集?
- android - SensorManager requestTriggerSensor 返回 false
- javascript - 使用扩展语法具有两个定义的调用方法
- django - 如何在 Django 表单中使用 TimeInput 小部件?
- sparql - !a 在 SPARQL 中是什么意思?
- google-cloud-firestore - 参数不可分配给 CollectionReference 错误。完全遵循 AngularFire2 文档
- android - 即使在 manifest.xml 中指定了父活动,为什么向上导航关闭应用程序而不是定向到父活动?
- android - 当应用程序在 ios 设备中关闭时,点击时的离子本地通知不起作用