.net Core 学习笔记(实体字段映射,IOC注入)
https://github.com/wj1034184751/ADO.NetCore.git
先简单的做一个学习架子,
EF层用的是 EFCore(2.1.0)+ Pomelo.EntityFrameworkCore.MySql(2.1.0)
实体映射主要是用了这三个类:
public interface IEntityTypeConfiguration
{
void Map(ModelBuilder builder);
} public interface IEntityTypeConfiguration<T> : IEntityTypeConfiguration where T : class
{
void Map(EntityTypeBuilder<T> builder);
} public abstract class WGEntityTypeConfig<T> : IEntityTypeConfiguration<T> where T : class
{
public abstract void Map(EntityTypeBuilder<T> builder); public void Map(ModelBuilder builder)
{
Map(builder.Entity<T>());
}
} public static class ModelBuilderExtentcs
{
private static IEnumerable<Type> GetMappingTypes(this Assembly assembly,Type mappingInterface)
{
return assembly.GetTypes().Where(x => !x.GetTypeInfo().IsAbstract && x.GetInterfaces().
Any(y => y.GetTypeInfo().IsGenericType && y.GetGenericTypeDefinition() == mappingInterface));
} public static void AddEntityConfigurationsFromAssembly(this ModelBuilder modelBuilder,Assembly assembly)
{
var mappingTypes = assembly.GetTypes()
.Where(type => type.BaseType != null && type.BaseType.IsGenericType && type.BaseType.GetGenericTypeDefinition() == typeof(WGEntityTypeConfig<>));
//var mappingTypes = assembly.GetMappingTypes(typeof(WGEntityTypeConfig<>));
foreach (var config in mappingTypes.Select(Activator.CreateInstance).Cast<IEntityTypeConfiguration>())
{
config.Map(modelBuilder);
}
}
}
然后在这里
接下来是简单的注入:
项目分成这几层:
BLL,DAL,EF,UI
BLL,DAL 层要实现注入可以加一个接口,IServiceSupportExten
然后
Assembly asmBLL = Assembly.Load(new AssemblyName("BLL"));
var serviceBLLTypes = asmBLL.GetTypes().Where(t => typeof(IServiceSupportExten).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract);
foreach (var serviceType in serviceBLLTypes)
{
foreach (var interType in serviceType.GetInterfaces())
{
services.AddSingleton(interType, serviceType);
}
} Assembly asmDAL = Assembly.Load(new AssemblyName("DAL"));
var serviceDALTypes = asmDAL.GetTypes().Where(t => typeof(IServiceSupportExten).IsAssignableFrom(t) && !t.GetTypeInfo().IsAbstract);
foreach (var serviceType in serviceDALTypes)
{
foreach (var interType in serviceType.GetInterfaces())
{
services.AddSingleton(interType, serviceType);
}
}
.net Core 默认提供了一种注入方式,然后,自己也去网上找了代码写了别一种
.net Core 学习笔记(实体字段映射,IOC注入)的更多相关文章
- .net core学习笔记(3)-依赖注入
.net core 中使用了大量的依赖注入,对依赖注入一直是一知半解,总想不透,项目中用的是一个网上的开源框架,从底层到web层都是用的构造函数依赖注入. 然后了在继承ActionFilterAttr ...
- ASP.NET Core 学习笔记 第三篇 依赖注入框架的使用
前言 首先感谢小可爱门的支持,写了这个系列的第二篇后,得到了好多人的鼓励,也更加坚定我把这个系列写完的决心,也能更好的督促自己的学习,分享自己的学习成果.还记得上篇文章中最后提及到,假如服务越来越多怎 ...
- .NET CORE学习笔记系列(2)——依赖注入【2】基于IoC的设计模式
原文:https://www.cnblogs.com/artech/p/net-core-di-02.html 正如我们在<控制反转>提到过的,很多人将IoC理解为一种“面向对象的设计模式 ...
- .NET CORE学习笔记系列(2)——依赖注入【1】控制反转IOC
原文:https://www.cnblogs.com/artech/p/net-core-di-01.html 一.流程控制的反转 IoC的全名Inverse of Control,翻译成中文就是“控 ...
- .NET CORE学习笔记系列(2)——依赖注入【3】依赖注入模式
原文:https://www.cnblogs.com/artech/p/net-core-di-03.html IoC主要体现了这样一种设计思想:通过将一组通用流程的控制权从应用转移到框架中以实现对流 ...
- Spring Framework 学习笔记——核心技术之Spring IOC
Spring Framework 官网文档学习笔记--核心技术之Spring IOC 官方文档 spring-framework-5.3.9 1. Spring Framework 核心技术 1.1 ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
- .NET CORE学习笔记系列(2)——依赖注入[5]: 创建一个简易版的DI框架[下篇]
为了让读者朋友们能够对.NET Core DI框架的实现原理具有一个深刻而认识,我们采用与之类似的设计构架了一个名为Cat的DI框架.在上篇中我们介绍了Cat的基本编程模式,接下来我们就来聊聊Cat的 ...
- .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]
原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...
随机推荐
- VMware虚拟机可与Win10物理机互ping并可访问互联网的设置方法
一.系统环境: VMware 15.Windows 10 1903.Windows 7 虚拟机 二.具体步骤: 1.Win10物理机,控制面板-所有控制面板项-网络连接-物理网卡适配器右键-属性-共 ...
- Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node_modules
今天用npm下载yarn,出现Missing write access to /usr/local/lib/node_modules npm ERR! path /usr/local/lib/node ...
- 笔记14:Docker 部署Python项目
Docker 部署Python项目 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取 ...
- 解决txt乱码:将windows新建txt转换成utf-8格式
场景:产品将版本发布说明发给配置管理员(我自己),我使用jenkins建的任务自动传这个版本发布说明文件(release_note.txt)到ftp以后,打开文件后发现乱码. 调试: 但是将文件另存为 ...
- 理解serialVersionUID是什么?有什么用?如何生成?
如果您曾经实现过Serializable接口,则必须遇到此警告消息 The serializable class xxx does not declare a static final serialV ...
- c# 第四节 Net Framework编写应用程序的过程
本节 1:创建.net应用程序所经历的步骤 2:cli是什么 3:程序集是什么 4:jit编辑器 5:托管代码 1:创建.net应用程序所经历的步骤 2:cli是什么 3:程序集是什么 4:jit编辑 ...
- TCP/IP协议族(五)
目前实际使用的网络模型是 TCP/IP 模型,它对 OSI 模型进行了简化,只包含了四层,从上到下分别是应用层.传输层.网络层和链路层(网络接口层),每一层都包含了若干协议. 协议(Protocol) ...
- Python DataFrame 按条件筛选数据
原始数据如下. 比如我想查看id等于11396的数据. pdata1[pdata1['id']==11396] 查看时间time小于25320的数据. pdata1[pdata1['time']< ...
- vue系列---Vue组件化的实现原理(八)
_ 阅读目录 一. 什么是Vue组件? 如何注册组件? 1.1 全局注册组件 1.2 局部注册组件 二:组件之间数据如何传递的呢? 1) props 2) $emit 3) 使用$ref实现通信 4) ...
- 41 修改树莓派交换分区 SWAP 的大小
http://blog.lxx1.com/3289 SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用.它和Windows系统的交 ...