abp

abp vnext2.0核心组件之模块加载组件源码解析

爱⌒轻易说出口 提交于 2020-02-08 20:23:34
老版Abp对Castle的严重依赖在vnext中已经得到了解决,vnext中DI容器可以任意更换,为了实现这个功能,底层架构相较于老版abp,可以说是进行了高度重构.当然这得益于.Net Core的DI容器组件本身的优势.接着 abp vnext2.0核心组件之模块加载组件源码解析 上文,上文中我跳过了DI切换这个流程,因为我觉得这是整个框架的亮点之一,所以单独写了这篇随笔. .Net Core2.2之后,切换DI的实现换了,改成实现如下接口 1、核心ServiceProviderFactory接口实现 核心原理非常的简单,看看vnext如何实现这个工厂约束接口,并返回指定provider. 大致的逻辑是传入ServiceCollection,遍历ServiceCollection使用autofac的containerbuilder进行注入.最后调用containerbuilder实例的builder的build方法,返回provider.一气呵成,很简单. 接着,重点来了,看看Populate方法,看看其如何将ServiceCollection中的类型注入autofac容器的. 先将原生DI的相关功能转换成Autofac的,接着进行类型注册. 第一步获取模块加载类型中所有的模块,模块信息如下: 第二步释出DI容器中的ServiceRegistrationActionList

abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之九(三十五)

允我心安 提交于 2020-02-04 21:50:32
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三) abp(net core)+easyui+efcore实现仓储管理系统——定义仓储并实现 (四) abp(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之控制器(六) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之增删改视图(八) abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之菜单与测试(九) abp(net core)+easyui+efcore实现仓储管理系统——多语言(十) abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一)

ABP学习实践(一)--概览

旧时模样 提交于 2020-01-28 18:42:27
学习使用ABP框架已有近一年了,有了一点积累,最近刚好把使用过程中的心得记录下。ABP框架是近些年比较流行的开源框架之一,主要特点我就不再一一赘述,一是网上已经有不少资料了,很多大牛也都比我写的详细和深刻,二是能看到这篇文章的应该对ABP框架是有些许了解的。废话不说,直奔主题。 注意:示例中使用ABP框架版本为4.6,发文时最新版本已到5.1,且运行环境为.NET Framework,尚未切换至.NET Core 参考资料 ABP框架中文文档 ABP官方网站-英文 ABP源代码地址-GitHub ABP源码分析 感谢诸多大牛的努力和分享,才使得我能更快的接触和了解ABP框架。 ABP框架的结构 官方文档上对ABP框架的结构进行定义,如下图所示: 从下到上依次是基础设施层、领域层、应用层、分布式服务层、展现层和客户端应用。在比较容易理解的分层结构基础上,框架本身有提供诸如对象映射、缓存、日志、多租户、异常处理、依赖注入等等一系列很有用的功能。 ABP框架的分层架构体现在代码解决方案的文件层次上就如下图所示: 在实际项目中,基础设施层连接数据库。而由于实际项目中采用了前后端分离的开发模式,所以客户端应用由前端开发人员实现,展现层也仅作为后端接口的基本管理应用来使用。后端开发人员的主要代码工作量就是在分布式服务层、应用层和领域层了,如果业务不是很复杂

使用ABP框架踩过的坑系列1

孤者浪人 提交于 2020-01-27 09:34:21
企业级(例如ERP)应用, 一遍一遍的在重复:认证、验证、异常处理、日志、国际化和本地化、数据库连接管理、配置管理、 审计记录等,同时.NET有很多最佳实践:分层、模块化、DDD领域驱动、DI依赖倒置等,采用ABP就是基于这些惯例,来避免重复劳动,并且提供高质量、高效率的.NET开发。对于没有专职架构师的小型公司来说,选择ABP,可能是比较好的方案。万事都有利有弊,使用框架带来好处的同时,也有诸如学习曲线、踩坑等问题,本人使用ABP有3年多时间,实践了几个项目,踩过的坑有很多;想通过这个系列,把这些经历分享给大家,希望给同志们带来一些帮助。 诚如ABP的作者所说:We are creating different applications based on different needs. But implementing common and similar structures over and over again, at least in some level. Authorization, Validation, Exception Handling, Logging, Localization, Database Connection Management, Setting Management, Audit Logging are some of these

使用ABP框架踩过的坑系列2

被刻印的时光 ゝ 提交于 2020-01-26 19:54:47
ABP中有很多惯例,如果使用得当,可以事半功倍,如果使用不当,也会有很大的麻烦,是否适当其实还是要看Need需求 ASP.NET Boilerplate (ABP) is an open source and well documented application framework started idea of "developing a common framework for all companies and all developers!" It's not just a framework but also provides a strong architectural model based on Domain Driven Design and best practices in mind. 开源和文档友好,适合所有公司所有开发者的公共框架,基于DDD提供强壮架构,并且是最佳实践,这是作者的预期目标。 看一下,代码例子,也许是程序员更喜欢的方式: public class TaskAppService : ApplicationService, ITaskAppService { private readonly IRepository<Task> _taskRepository; public TaskAppService(IRepository<Task>

ABP理论学习之SignalR集成

荒凉一梦 提交于 2020-01-25 23:47:29
返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR 相当容易。查看 SignalR文档 获取更多关于SignalR的详细信息。 安装 服务端 将 Abp.Web.SignalR nuget包安装到你的项目中(一般是web层),然后给你的模块添加一个依赖: [DependsOn(typeof(AbpWebSignalRModule))] public class YourProjectWebModule : AbpModule { //... } 然后在你的OWIN Startup类中使用 MapSignalR 方法: [assembly: OwinStartup(typeof(Startup))] namespace MyProject.Web { public class Startup { public void Configuration(IAppBuilder app) { app.MapSignalR(); //... } } } 注意:Abp.Web.SignalR只依赖于Microsoft.AspNet.SignalR.Core包。因此,如果你之前没有安装,那么你也需要将 Microsoft.AspNet.SignalR 安装到你的web项目中。 客户端

[Abp 源码分析]十一、权限验证

有些话、适合烂在心里 提交于 2020-01-25 14:48:56
0.简介 Abp 本身集成了一套权限验证体系,通过 ASP.NET Core 的过滤器与 Castle 的拦截器进行拦截请求,并进行权限验证。在 Abp 框架内部,权限分为两块,一个是功能(Feature),一个是权限项(Permission),在更多的时候两者仅仅是概念不同而已,大体处理流程还是一样的。 由于 Abp 本身是针对多租户架构进行设计的,功能是相对于租户而言,比如针对 A 租户他每月的短信发送配额为 10000 条,而针对 B 租户其配额为 5000 条,可能 C 租户该功能都没有开通。 本篇文章仅针对基本的验证机制进行解析,后续文章会进行详解。 0.1 验证流程图 1.启动流程 1.1 流程图 1.2 代码流程 首先在注入 Abp 框架的时候,通过注入过滤器一起将权限验证过滤器进行了注入。 internal static class AbpMvcOptionsExtensions { // ... 其他代码 private static void AddFilters(MvcOptions options) { // ... 其他注入的过滤器 options.Filters.AddService(typeof(AbpAuthorizationFilter)); // ... 其他注入的过滤器 } // ... 其他代码 } Abp 除了拦截验证 API 接口

Asp.Net Core 3.1 Api 集成Abp项目依赖注入

南楼画角 提交于 2020-01-25 14:27:58
Abp 框架 地址 https://aspnetboilerplate.com/ 我们下面来看如何在自己的项目中集成abp的功能 我们新建core 3.1 API项目和一个core类库 然后 两个项目都要安装Abp Nuget Package 版本为5.1.0 如上图,在Application项目新建项目模块类,Initialize方法中,会在启动时扫描dll中需要依赖注入的类和接口 如上图,在ApiHost项目新建项目模块类,该项目依赖Application项目 在Application 建立Qualities文件夹,在Dto文件夹中新建一个数据传输模型 TestCaseDto,继承Abp的Entity(提供一个int型的Id) 在Qualities中新建接口ITestCaseAppService 新建TestCaseAppService继承接口,并且继承ITransientDependency ,Abp会扫描继承该接口,依赖注入时生命周期为瞬时的,另外一个常见的接口是ISingletonDependency. ApiHost项目安装Abp.AspNetCore Nuget Package 5.1.0,Startup 类引入命名空间using Abp.AspNetCore; ConfigurationServices改了返回值类型为IServiceProvider后需要

ABP理论学习之数据传输对象(DTO)

我是研究僧i 提交于 2020-01-24 14:45:02
返回总目录 本篇目录 为何需要DTO 领域层抽象 数据隐藏 序列化和懒加载问题 DTO惯例和验证 DTO和实体的自动映射 使用特性和扩展方法进行映射 帮助接口 DTO用于 应用层 和 展现层 间的数据传输。 展现层调用具有DTO参数的 应用服务 方法,然后应用服务使用领域对象来执行一些特定的业务逻辑,最后返回给展现层一个DTO。因此,展现层完全独立于领域层。在一个理想的分层应用中,展现层不直接和领域对象打交道(仓储,实体...)。 为何需要DTO 为每个应用服务方法创建一个DTO起初可能被看作是一项乏味而又耗时的事情。但如果正确地使用它,那么DTOs可能会拯救你应用。为啥呢? 领域层抽象 DTO为展现层抽象领域对象提供了一种有效方式。这样,层与层之间就正确分离了。即使你想完全分离展现层,仍然可以使用已存在的应用层和领域层。相反,只要领域服务的契约(方法签名和DTOs)保持不变,即使重写领域层,完全改变数据库模式,实体和ORM框架,也不需要在展现层做任何改变。 数据隐藏 试想你有一个User实体,包含Id,Name,EmailAddress和Password字段。如果UserAppService的GetAllUsers()方法返回一个List ,即使你没有在屏幕上显示它,那么任何人也都能看到所有user的密码。它不是涉及安全的,而是与数据隐藏相关的。应用服务都应该返回给展现层需要的