volo

仓储模式到底是不是反模式?

喜欢而已 提交于 2021-01-15 16:16:03
【导读】 仓储模式我们已耳熟能详,但当我们将其进行应用时,真的是那么得心应手吗?确定是解放了生产力吗?这到底是怎样的一个存在,确定不是反模式? 一篇详文我们探讨仓储模式,这里仅我个人的思考,若有更深刻的理解,请在留言中给出 仓储反模式 5年前我在Web APi中使用EntityFramework中写了一个仓储模式,并将其放在我个人github上,此种模式也完全是参考所流行的网传模式,现如今在我看来那是极其错误的仓储模式形式,当时在EntityFramework中有IDbSet接口,然后我们又定义一个IDbContext接口等等,大同小异,接下来我们看看在.NET Core中大多是如何使用的呢? ???? 定义通用IRepository接口 public interface IRepository<TEntity> where TEntity : class { /// <summary> /// 通过id获得实体 /// </summary> /// <param name="id"></param> /// <returns></returns> TEntity GetById(object id); //其他诸如修改、删除、查询接口 } 当然还有泛型类可能需要基础子基础类等等,这里我们一并忽略 ???? 定义EntityRepository实现IRepository接口

使用Volo.Abp.MailKit发送邮件

∥☆過路亽.° 提交于 2020-08-16 02:45:09
Volo.Abp.MailKit封装继承MailKit库,为Abp邮件发送提供了快捷实现。 邮箱配置 qq邮箱支持smtp功能,需要去申请开通。 参考qq邮箱设置 ,最重要的是smtp发送邮件,qq邮箱对应的密码不是用户的qq邮箱密码,而是需要申请生成的授权码。 在项目的appsettings.json配置文件里,添加如下配置项目。 "Settings": { "Abp.Mailing.DefaultFromAddress": "xx@qq.com", "Abp.Mailing.DefaultFromDisplayName": "xx", "Abp.Mailing.Smtp.Host": "smtp.qq.com", "Abp.Mailing.Smtp.Port": "587", "Abp.Mailing.Smtp.Domain": "smtp.qq.com", "Abp.Mailing.Smtp.UserName": "xx@qq.com", "Abp.Mailing.Smtp.Password": "xxx", "Abp.Mailing.Smtp.EnableSsl": "false", "Abp.Mailing.Smtp.UseDefaultCredentials": "false" } 注意 Abp.Mailing.Smtp.EnableSsl项目应设置为false。

基于 abp vNext 和 .NET Core 开发博客项目

血红的双手。 提交于 2020-07-28 20:15:53
基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场 1|0完善与美化 直奔主题,首先将各项目层的项目文件(.csproj)打开,格式化一下,没有引用这句代码的也加一下,这里其实就是将公共属性拿出来,没什么特殊的。 common.props中的代码也非常简单,主要是禁用当开启输出XML的时候没有给代码进行summary注释产生的警告,其实这些大可不必为之折腾,不影响项目的成功运行。如果您觉得没啥必要,完全可以跳过此小节看最后。 1|1.Application .Application层现在只引用Volo.Abp.Identity.Application包,和依赖.Application.Caching、.Application.Contracts、.Domain.Shared三个项目。 //Meowv.Blog.Application.csproj netcoreapp3.1 1|2.Application.Caching .Application.Caching层看名字就知道,我准备用它来处理缓存,这里会用到两个包,Volo.Abp.Caching、Microsoft.Extensions.Caching.Redis。 不管三七二十一,新建一个模块类MeowvBlogApplicationCachingModule.cs

[Abp vNext 源码分析]

谁说我不能喝 提交于 2020-05-02 14:09:54
一、简要介绍 在以前的文章里面,我们介绍了 ABP vNext 在 DDD 模块定义了仓储的接口定义和基本实现。本章将会介绍,ABP vNext 是如何将 EntityFramework Core 框架跟仓储进行深度集成。 ABP vNext 在集成 EF Core 的时候,不只是简单地实现了仓储模式,除开仓储以外,还提供了一系列的基础设施,如领域事件的发布,数据过滤器的实现。 二、源码分析 EntityFrameworkCore 相关的模块基本就下面几个,除了第一个是核心 EntityFrameworkCore 模块以外,其他几个都是封装的 EntityFrameworkCore Provider,方便各种数据库进行集成。 2.1 EF Core 模块集成与初始化 首先从 Volo.Abp.EntityFrameworkCore 的 AbpEntityFrameworkCoreModule 开始分析,该模块只重写了 ConfigureServices() 方法,在内部也只有两句代码。 public override void ConfigureServices(ServiceConfigurationContext context) { // 调用 AbpDbContextOptions 的预配置方法,为了解决下面的问题。 // https://stackoverflow.com

ABPvnext源码分析 (二):Autofac整合及动态代理

我与影子孤独终老i 提交于 2020-04-28 10:10:38
写在前面: 上一篇我们讲了Abp的核心模块,这一篇我们把DI 的serviceProvider替换成Autofac,另外添加动态代理拦截器功能。动态代理指从DI容器获取组件实例时组件实例不是原实例,而是代理实例。代理实例是对原实例进行了封装, 在实例方法前后添加逻辑处理,让获取的对象表现基于应有对象但又有自己的逻辑。举个例子,代理对象方法可以在原方法前后记录时间戳,来分析原方法的处理时长。Abp Core默认使用的是微软官方的DI实现, 那个功能较简单没有代理功能,为了添加动态代理功能,我们把DI实现替换为Autofac,并使用Autofac集成的代理实现方式Castle Core。 集成Autofac,我们需要添加Volo.Abp.Autofac包,这个包本身是Abp模块,其依赖AbpCastleCoreModule模块(Volo.Abp.CatleCore) namespace Volo.Abp.Autofac { [DependsOn( typeof (AbpCastleCoreModule))] public class AbpAutofacModule : AbpModule { } } 所以我们添加Volo.Abp.Autofac包并让我们的应用模块DependsOn(typeof(AbpAutofacModule))就自动的把AbpAutofacModule

ABPvnext源码分析 (一):核心模块Abp.Core

倖福魔咒の 提交于 2020-04-28 03:01:22
写在前面: ABPvnext(v2)在github开源地址为https://github.com/abpframework/abp,该项目是ABP项目基于netcore版本的第二代实现。他基于netcore3.0,相对于v1,更轻量级,面向微服务等现代网络架构,是学习netcore,学习架构设计的很好的素材。 本系列记录ABPvnext源码学习的详细内容,基于的版本是v1.0正式版。 核心模块(Core模块):ABP的Core模块为Volo.Abp.Core程序包,可以通过nuget安装使用,大家也可以在github查看其源码(framework/src/Volo.Abp.Core)。Core模块整体看来分为两大部分。一部分为一些基础的帮助函数,大部分为无依赖的独立的扩展方法。由于这部分代码相互牵扯很少,相信读者很容易看懂,本篇直接忽略。本篇关注的是另一部分, DI封装以及相关的一些基础功能(这块代码主要在framework/src/Volo.Abp.Core/Volo/)。 Core模块DI相关部分主要是实现了模块管理功能,其主要参考了Autofac模块管理的实现。我想之所以重新实现一遍没有直接依赖Autofac是为了和具体的DI依赖库相隔离,做一层中间层(ABP的DI实现)。代码的其他部分依赖于中间层而不依赖于Autofac

[Abp vNext 源码分析]

只谈情不闲聊 提交于 2020-04-24 13:18:57
一、简要介绍 在以前的文章里面,我们介绍了 ABP vNext 在 DDD 模块定义了仓储的接口定义和基本实现。本章将会介绍,ABP vNext 是如何将 EntityFramework Core 框架跟仓储进行深度集成。 ABP vNext 在集成 EF Core 的时候,不只是简单地实现了仓储模式,除开仓储以外,还提供了一系列的基础设施,如领域事件的发布,数据过滤器的实现。 二、源码分析 EntityFrameworkCore 相关的模块基本就下面几个,除了第一个是核心 EntityFrameworkCore 模块以外,其他几个都是封装的 EntityFrameworkCore Provider,方便各种数据库进行集成。 2.1 EF Core 模块集成与初始化 首先从 Volo.Abp.EntityFrameworkCore 的 AbpEntityFrameworkCoreModule 开始分析,该模块只重写了 ConfigureServices() 方法,在内部也只有两句代码。 public override void ConfigureServices(ServiceConfigurationContext context) { // 调用 AbpDbContextOptions 的预配置方法,为了解决下面的问题。 // https://stackoverflow.com