首页 > 其他分享 >.NET Core中批量注册上下文

.NET Core中批量注册上下文

时间:2023-02-19 22:59:25浏览次数:35  
标签:Core builder typeof ServiceLifetime var NET 上下文 options

1.定义一个静态类HostBuilderExtend作为扩展

 1 public static class HostBuilderExtend
 2     {
 3         public static void Register(this WebApplicationBuilder builder)
 4         {
11 
12             #region 配置数据库
13             List<Assembly> assemblyList = new List<Assembly>();
14             assemblyList.Add(Assembly.Load("上下文程序集"));
15             builder.Services.AddAllDbContexts(options =>
16             {
17                 options.UseSqlServer(builder.Configuration.GetConnectionString("ConnectionString"));
18                 //将SQL语句输入到控制台
19                 options.LogTo(Console.WriteLine);
20             }, assemblyList);
21             #endregion
42         }
43 
44         /// <summary>
45         /// 注册所有数据库上下文
46         /// </summary>
47         /// <param name="services">服务容器</param>
48         /// <param name="options">数据库上下文配置</param>
49         /// <param name="assemblies">程序集</param>
50         /// <returns></returns>
51         public static void AddAllDbContexts(this IServiceCollection services,
52             Action<DbContextOptionsBuilder>options,
53             List<Assembly>assemblies)
54         {
55             //AddDbContext方法的参数类型
56             Type[] types = new Type[] {typeof(IServiceCollection),
57             typeof(Action<DbContextOptionsBuilder>),
58             typeof(ServiceLifetime),typeof(ServiceLifetime)};
59             //获得AddDbContext方法
60             var methodAddDbContext = typeof(EntityFrameworkServiceCollectionExtensions)
61                 .GetMethod("AddDbContext", 1, types);
62             foreach (var asmToLoad in assemblies)
63             {
64                 //获取所有继承自DbContext的类
65                 foreach(var dbCtxType in asmToLoad.GetTypes().Where(m=>!m.IsAbstract&&typeof(DbContext).IsAssignableFrom(m)))
66                 {
67                     var methodGenericAddDbContext=methodAddDbContext.MakeGenericMethod(dbCtxType);
68                     methodGenericAddDbContext.Invoke(null, new object[]
69                     {
70                         services,options,ServiceLifetime.Scoped,ServiceLifetime.Scoped,
71                     });
72                 }
73             }
74         }
75     }

2.在Program类中使用Register方法

var builder = WebApplication.CreateBuilder(args);
builder.Register();

标签:Core,builder,typeof,ServiceLifetime,var,NET,上下文,options
From: https://www.cnblogs.com/budongdong/p/17135711.html

相关文章

  • 关于CMCC连接后显示无Internet解决方法
    (1)(2)(3) ......
  • linux 下装 mono,使apache 运行 asp.net
    1.更新系统  yumupdate  2.安装必要的相关库  yuminstallgccgcc-c++bisonpkgconfigglib2-develgettextmakelibpng-devellibjpeg-devellibtiff-develli......
  • 10年磨一剑,.net 公共类库,终于初版
    1、vs搜索nuget MathSoftCommonLib漫思公司前端工具库MathSoftModelLib  漫思公司前端基础模型库2、目前已经全部开源,在github上jidanji/MathSoftCommonLib(githu......
  • 学习ASP.NET Core Blazor编程系列二十六——登录(5)
    学习ASP.NETCoreBlazor编程系列文章之目录学习ASP.NETCoreBlazor编程系列一——综述学习ASP.NETCoreBlazor编程系列二——第一个Blazor应用程序(上)学习A......
  • kubeadm方式部署Kubernetes集群
    目录初始化准备安装kubeadm初始化Master集群将新的Node节点加入集群部署CNI网络插件其他配置初始化准备1、关闭防火墙Centos7默认启动了防火墙,而Kubernetes的Master与N......
  • DynamicExpression.Core
    DynamicExpression.Core.netlambda表达式合并 事情的起因是公司一个小伙子问了我个问题“海哥,来帮我看下这段代码怎么不行”Func<Report,bool>nameFilter=x=>x......
  • 【ASP.NET Core】标记帮助器——元素筛选
    前一篇中老周从标记帮助的底层介绍关键性的接口,如ITagHelper,它是一个标志,用于识别哪些类属于TagHelper。标记帮助器毕竟是针对HTML标记的,所以得筛选。说白了就是我......
  • internet
     1、因特网互联网因特网是"Internet”的中文译名,它起源于美国的五角大楼,它的前身是美国国防部高级研究计划局(ARPA)主持研制的ARPAnet。阿帕网于1969年正式启用,当时仅......
  • Python报错TypeError: 'NoneType' object is not callable
    Python报错TypeError:'NoneType'objectisnotcallable 保存内容如下  检查src文件后没有发现问题,最终在公共方法找到原因注释掉return了,取消后问题解决 ......
  • [kubernetes]集群中部署CoreDNS服务
    前言从k8s1.11版本开始,k8s集群的dns服务由CoreDNS提供。之前已经使用二进制文件部署了一个三master三node的k8s集群,现在需要在集群内部部署DNS服务。环境信息IP......