首页 > 解决方案 > 如何从另一个程序集将 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 文件,我将无法在启动主应用程序的同时运行此启动。

如果有解决办法请告诉我谢谢

标签: c#asp.net-corereflectionentity-framework-core

解决方案


解决方案是反射解决方案,因为@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);

推荐阅读