
ABP
文章平均质量分 64
董厂长
I'm looking for opportunities. If you are interested, please send me a message.
展开
-
用于计算Quartz中,下次触发时间距离当前时间的程序
将表示下一次触发的时间距离现在还有多少分钟。,然后与当前时间进行比较,以确定下一次触发的时间。是以本地时间表示的,所以你需要确保。在 .NET 中,一个。都是以相同的时区表示的。原创 2024-05-11 14:36:03 · 437 阅读 · 0 评论 -
Angular构建Library报错:error NG3001: Unsupported private class
通过将需要导出的组件、服务或指令集中在顶层入口文件中,可以更好地管理这些依赖关系,并确保任何使用你的库的开发人员都能够正确地安装和配置这些依赖项。总之,将组件、服务或指令导出到顶层入口文件中是为了确保其他模块或应用程序能够访问并正确使用你的库中的功能。这样可以提供良好的可见性、统一的访问点和更好的依赖关系管理。统一访问点:通过将所有需要被其他模块或应用程序使用的内容导出到顶层入口文件中,可以提供一个统一的访问点。可见性:如果你想让其他模块或应用程序能够使用你的组件、服务或指令,你必须将它们导出。原创 2024-02-20 11:50:57 · 644 阅读 · 1 评论 -
The LINQ expression “xxx“ could not be translated
投影操作符中,我们就能够正确地对分组进行操作,因为它已经被组合起来进行了翻译。方法,你确保了分组的列表已经被组合起来,并且成功解决了报错。然而,问题在于 LINQ 表达式无法直接翻译带有分组参数的。类型的对象,而不是标准的集合类型(如。因为分组的列表返回的是一个。原创 2023-12-08 14:26:08 · 1137 阅读 · 1 评论 -
我在使用ABP框架。我在domian层写了一个manager,是否一定需要继承一个接口?
是的,按照ABP框架的约定,如果您在Domain层中创建了一个Manager类而没有让它继承接口,那么AppService层就无法直接通过依赖注入来使用这个Manager。虽然在ABP框架中不是一定要继承接口,但是使用接口可以提供更好的代码组织、可维护性和可扩展性,因此强烈建议在Domain层的manager类上使用接口。因此,根据ABP框架的最佳实践,建议您尽量在Domain层中将Manager类定义为接口的实现,以便更好地利用依赖注入的优势和框架提供的功能。在ABP框架中,依赖注入是通过接口来实现的。原创 2023-11-22 14:57:40 · 1007 阅读 · 0 评论 -
EFCore:多线程中使用仓储方法,报错A second operation was started on this context instance before a previous operat
abpvnext 开发中ValidationErrors和LifetimeScope异常的解决办法_abp vnext 异常处理_吹牛不交税的博客-优快云博客。当调用这个方法时,它会在后台启动一个新的任务,并在完成后返回结果。这使得我们可以在调用异步方法的同时继续执行其他任务,而不必等待异步方法完成。3. 在构造函数注入IServiceProvider,应用中通过IServiceProvider的GetService方法获取实例。若开启多线程,在不同的线程中使用同一个DbContext上下文,则报错。原创 2023-08-17 10:38:29 · 3346 阅读 · 2 评论 -
Q&A:BackgroundJob/Quartz 的一些误区
尽管Hangfire和Quartz在实现和使用上有所不同,但它们的目标都是使任务调度更加简单和可靠。您可以根据您的需求和项目的规模选择适合的库,以便更好地管理和执行后台作业。Quartz提供了丰富的API和配置选项,适用于复杂的任务调度需求,如分布式任务调度、动态任务调度等。它们可以帮助我们编写和管理定期执行的任务,如定时任务和后台作业。2. Quartz是一个功能强大的作业调度框架,提供了更高级的功能和灵活性。虽然Hangfire和Quartz都提供了类似的功能,但它们在实现和使用上有一些不同。原创 2023-08-07 11:29:36 · 267 阅读 · 0 评论 -
ABP 后台任务生产者-消费者模式的实现逻辑
在 ABP 中,生产者通过调用 `IBackgroundJobManager` 接口的 `AddJobAsync` 方法来添加后台任务,消费者则通过调用 `IBackgroundJobExecuter` 接口的 `ExecuteAsync` 方法来执行后台任务。消费者会不断地从队列中获取任务,并执行任务对应的业务逻辑。当队列中有可执行的任务时,消费者会从队列中获取一个任务,并执行该任务对应的业务逻辑。当调用 `Start` 方法时,消费者会开始不断地从后台任务队列中获取任务,并执行任务对应的业务逻辑。原创 2023-08-05 20:21:54 · 429 阅读 · 0 评论 -
ABP:BackgroundJob/Quartz 结合业务实现定时发送
我在使用ABP框架,现在想实现一个定时任务功能,描述:每天八点调用特定接口,调用n次后结束不再调用。相关的数据都来自于一个特定的实体“fuck”。:可以使用ABP框架自带的定时任务功能来实现。原创 2023-08-05 19:56:04 · 2108 阅读 · 0 评论 -
Angular:动态依赖注入和静态依赖注入
在 Angular 中,使用构造函数注入的方式将服务注入到组件中是一种静态依赖注入的方式。这种方式需要在组件的构造函数中显式声明该服务的类型,并由 Angular 的依赖注入系统自动创建和注入该服务的实例。原创 2023-07-24 17:01:35 · 2376 阅读 · 0 评论 -
精读《领域驱动设计》:Cohesive Mechanism 内聚机制
内聚机制可用于封装复杂的逻辑。这两种模式都会留下一个更连贯和简化的核心领域。比如ABP的DI机制,使得我们更关心依赖 或者说 只关心于领域?DI机制是封装了复杂了依赖注入具体实现。内聚机制是一种概念,不是某一种具体实现。原创 2023-07-13 22:49:12 · 385 阅读 · 0 评论 -
ABP:get index in foreach()/ 在foreach中使用index
具体来说,我们可以使用 Select 方法生成一个包含索引值的元组,然后使用 var (singleBeamGroup, index) 语法糖来同时声明两个变量,其中 index 变量将包含当前循环的索引值。但是,在某些情况下,我们需要获取当前循环的索引值,以便进行一些操作。其中,value 表示集合中的每个元素,i 表示元素在集合中的索引值。如果你使用的是较早的版本,可以考虑使用传统的 for 循环来获取索引值。变量表示当前循环的集合元素,index 变量表示当前循环的索引值。原创 2023-07-10 15:25:26 · 123 阅读 · 0 评论 -
ABP recall:ABP modularization
为什么recall,因为之前有个task涉及到项目的配置问题,完全不知道配置文件到底在干什么,重新结合 ABP的模块化理解一下。第一种想法,把相关的一系列配置抽象为静态方法,例如将所有swagger相关配置放到一个静态方法里面,想用的时候就调用。项目A需要就引用绿色类库,项目B需要也可以引用绿色类库的方法。这两个方法和之前的静态方法的改造是一样的道理。缺点:需要注意 A配置可能在B配置之后,需要关注配置顺序。方法,该方法是应用程序的起始点。文件,可以自定义应用程序的启动过程和配置。它可以配置应用程序的。原创 2023-07-02 20:35:22 · 163 阅读 · 0 评论 -
Task.FromResult()是什么?应该在何种情况下使用?
例如,如果您编写了一个方法,该方法需要返回一个 `Task` 对象,但实际上不涉及任何异步操作,那么您可以使用 `Task.FromResult()` 来创建一个已完成的 `Task` 对象,并将要返回的结果分配给该对象。只有在需要返回一个 `Task` 对象的方法中,且该方法不执行任何异步操作时,才需要使用它。` 是一个静态方法,可以用于创建一个已完成的 `Task` 对象,并将指定的结果分配给该对象。对象,并将要返回的结果分配给该对象。` 来创建一个已完成的 `Task` 对象,并将 `原创 2023-06-27 10:17:32 · 1815 阅读 · 0 评论 -
ABP : 软删除过滤器相关QA
软删除过滤器是一种常见的技术,用于在数据库中标记记录已被删除,而不是实际删除记录。通过禁用软删除过滤器,您可以查询已被标记为删除的记录。在ABP框架中,软删除过滤器是一种常见的技术,用于在多租户应用程序中实现数据隔离。软删除过滤器的作用是在数据库中标记记录已被删除,而不是实际删除记录。软删除不会从数据库中永久删除数据,而是将其标记为已删除状态,这样可以在需要时恢复数据。要在ABP框架中使用软删除过滤器,您需要在应用程序模块中启用它,并将其应用于实体。在 ABP 框架中,软删除和硬删除的实现是由实体的。原创 2023-06-20 10:11:07 · 516 阅读 · 0 评论 -
observableCollection<T>在MAUI中如何使用
是一个可观察的集合类,它可以在集合中添加、删除或更改元素时通知绑定到该集合的控件进行更新。这使得在 WPF、Windows Forms 和 ASP.NET 等应用程序中,可以轻松地实现数据绑定和 UI 更新。此问题出现的原因:之前看资料,viewmodel中还需要写事件通知view更新,感觉这个很麻烦,后来看到observableCollection可以方便的进行事件通知。当然,实际应用中可能涉及到更复杂的数据绑定和 UI 更新操作,但是基本的原理是相同的。在 MAUI 中,可以使用。原创 2023-05-23 22:26:21 · 919 阅读 · 0 评论 -
ABP中的[AllowAnonymous]作用是什么?
AllowAnonymous] 是一个特性标记(attribute),可以应用在 ASP.NET Core MVC 或者 Web API 应用程序的控制器或方法上。它的作用是允许未经认证的用户匿名访问带有身份验证限制的控制器和方法。如果您想要允许某些操作不需要身份验证,也不需要注册,请使用 [AllowAnonymous] 特性标记。例如,在您的 Web 应用程序中,您可以使用 [AllowAnonymous] 特性标记来允许任何人可以查看博客文章列表页面,而无需进行身份验证。原创 2023-05-16 17:22:51 · 2018 阅读 · 0 评论 -
关于ABP使用工作单元的Q&A --- UOW方式/AOP/AOP思想的体现/ABP体现AOP
在 ABP 框架中,工作单元(UnitOfWork)是一个重要的概念,它负责管理与数据库的交互操作。在应用程序中使用工作单元可以提高代码的可测试性和可维护性。下面是在 ABP 应用程序中使用工作单元的示例代码:在上面的示例代码中,我们注入了一个名为 的 类型的依赖项,并在 方法中使用工作单元来管理与数据库的交互。首先,在方法的开头处我们使用 语句创建了一个新的工作单元对象 ,并在其作用域内执行了一系列数据库操作。这些操作包括插入一条新记录和提交保存更改。如果在执行这些操作时出现异常,我们会在原创 2023-04-26 11:17:39 · 919 阅读 · 0 评论 -
我是否可以将EF core的工作单元 理解为 一个数据库事务?
这些属性确保了在工作单元中执行的所有操作是可靠和可恢复的,并且提供了一种有效的方法来处理数据的并发访问和故障恢复。工作单元是一个在应用程序和数据库之间建立的屏障,用于封装所有对数据存储区域的访问。默认情况下,工作单元会在操作完成后提交事务并关闭连接,但你也可以在需要时手动控制事务的提交和回滚。因此,可以说将 EF Core 的工作单元视为一个数据库事务是正确的,这两者的目标和基本原则都是相同的:确保在数据存储区域中进行的所有更改都是原子性和一致性的。原创 2023-04-25 14:56:31 · 300 阅读 · 0 评论 -
AutoMapper自定义映射相关内容
AutoMapper提供了相关的API来支持自定义的Mapping配置,并且他支持lamda。比较复杂,并且每次都需要手动映射。使用自定义的AutoMapper。原创 2023-04-23 10:20:33 · 326 阅读 · 0 评论 -
《领域驱动设计》:8.1.3 深层模型的建立
实际工作中出现的场景是,产品经理和领域专家沟通后,未与研发达成“通用语言”的同步,导致对同一“模型”的理解偏差,(这边的“模型”,不仅指数据的抽象,更多指代业务的抽象)。原创 2023-04-13 11:10:32 · 282 阅读 · 0 评论 -
ABP:foreach和Foreach区别
即使我们在遍历过程中删除了列表中的元素,也不会引发异常,也不会引起循环的意外行为,因为Parallel()方法是对多个线程进行并行操作,不会修改被遍历的集合本身,也就不会引起问题。foreach是一种用于遍历集合的基本循环结构,而Foreach是ABP框架中提供的多线程并行遍历集合的工具类。它们各自有其适用的领域,需要。在使用foreach循环时,循环变量会被拷贝,因此在循环内修改该变量不会影响循环的次数和结果。与此不同的是,在Foreach中,遍历枚举器时,可以使用单独的线程并行进行操作。原创 2023-03-31 16:46:37 · 191 阅读 · 0 评论 -
.net 拓展方法的相关问题
拓展方法(Extension Method)是一种在已有类型上添加新方法的技术,可以方便地对现有类型进行功能扩展而不需要修改原有类型的定义。在 C# 中,拓展方法是通过静态方法实现的,但是它们的调用方式与实例方法相同。在上面的示例中,我们定义了一个名为 IsNullOrEmpty 的拓展方法,它扩展了 string 类型。如果一个方法同时满足以上两个条件,那么它就是一个拓展方法。标识,并且这个参数的类型确定了要扩展的类型。方法的第一个参数必须使用。原创 2023-03-26 21:03:39 · 314 阅读 · 0 评论 -
ABP IStringLocalizer部分场景不生效的问题
本地项目依赖注入本地化服务时候生效,第三方项目调用本地接口时候出现本地化失效的问题。原创 2023-03-08 11:01:55 · 559 阅读 · 0 评论 -
依赖倒置DIP在系统架构中的应用
同样的,替换模板的生成也不应该关注R的业务,根据R定义的DTO/Entity 来动态生成的对应的XML。简单理解为: R项目 调用了 E项目的打印接口,但是E项目需要对R传来对数据传输对象DTO进行二次处理,甚至夹杂很多R项目的业务逻辑(去调用R项目的接口),经过多个迭代以后,R项目和E项目的接口对接人已经成为了相亲相爱一家人👨👩👧👧。从代码层面来说,E应该只定义接口的规范,具体的实现让R来做,比如打印类的定义可以直接继承自R项目的DTO,这样不会因为业务的频繁变动而导致对接人的工作量增加。原创 2023-03-02 22:52:37 · 320 阅读 · 0 评论 -
JToken, JObject, JArray 的一些内容
JProperty - 表示一个JSON属性(在JObject中是一个name/JToken键值对): 用反序列化来实现json数据的解读,这需要首先知道json数据的结构并且建立相应的类才能反序列化。:Newtonsoft.Json封装类,里面的JToken直接实现对JSON的增删改查。JContainer - 能够包含其它JToken的JToken抽象基类。JArray - 表示一个JSON数组(包含一个有序的List):一旦遇到动态的json数据,这种方法就不使用。原创 2023-02-16 16:16:37 · 1824 阅读 · 0 评论 -
ABP:内置logger and 第三方库serilog 之间的关系
今天在看项目的日志记录功能,比较疑惑为什么项目中有的地方使用然后又在资源文件下看见日志的第三方库Serilog解答:ASP.NET Core 提供了 Logging 的抽象接口, third party 都会依据抽象来做实现. ASP.NET Core 自己也实现了一套简单的 log, 它只能不能只能输出到控制台,但是不能输出到文件Serilog.原创 2022-12-01 15:59:01 · 677 阅读 · 0 评论 -
ABP:审计日志相关理解 & 及其流程
最近在做多个服务API调用的审计功能,开始看一下资料记录一下注意 Get 请求,ABP是不会被记录的,因为get会导致数据库数据无限制增长。在ABP中,中间件是被默认添加的。原创 2022-11-30 19:05:38 · 730 阅读 · 0 评论 -
精读DDD:service
精读DDD,今天再次理解一下service,概念以及应用到实际工作中出现的一些错误。原创 2022-11-10 14:55:37 · 527 阅读 · 0 评论 -
ABP后端的校验使用:FluentValidation
EF Core学习笔记:配置的方式 特性/Fluent API_董厂长的博客-优快云博客_efcore 特性前置笔记:EF Core学习笔记:CRUD_董厂长的博客-优快云博客两种配置方式 1.特性配置 2.Fluent Api第一种方式写在实体类中,比较耦合,最好使用第二种。.net内置数据校验机制,在项目代码中发现很多地方使用了特性校验。原创 2022-11-01 16:57:44 · 825 阅读 · 0 评论 -
关于LINQ的模糊查询
利用linq中的WhereIf扩展方法。原创 2022-11-01 12:11:07 · 1334 阅读 · 0 评论 -
c# [Serializable]特性
序列化前后对象的变化:对于_myInt成员,其顺利地通过反序列化还原了初始值:而_myPrivate成员,由于NonSerialized的作用而丢失了初始值。可以通过申明Serializable特性来使类型的对象可以被序列化,同时,对于一些特殊的不希望被序列化的成员,可以为其添加NonSerialized特性。在.NET中,通过Serializable特性提供了序列化对象实例的机制。而对象的实例则包含类型的成员变量、类型的名称以及对象所在的程序集等信息。,是指把实例对象转换为可方便存储、传输和交互的。原创 2022-11-01 11:43:03 · 734 阅读 · 0 评论 -
SignalR向部分客户端进行消息推送
之前做Task的解决方案是不同的功能对应不同的Hub,分开进行消息推送。应付简单的场景是足够的。不要局限于聊天室功能,再举个栗子,OA流程的请假功能,OA通知到Hub,Hub通知到领导。3、Hub的Clients属性为IHubCallerClients类型,可以对连接到当前集线器的客户端进行筛选。举个栗子:聊天室的demo下,北京客户端 和 上海客户端链接是同一个hub,但是需求是单个hub向上海客户端发消息。(用户id就是对应登录的时候ClaimTypes.NameIdentifier的Claim)。原创 2022-10-27 17:57:09 · 967 阅读 · 0 评论 -
关于SignalR的身份认证问题
7、在需要登录才能访问的集线器类上或者方法上添加[Authorize]。也支持角色等设置,可以设置到Hub或者方法上。5、app.UseAuthorization()这行代码之前添加app.UseAuthentication()。6、在控制器类Test1Controller中增加登录并且创建JWT令牌的操作方法Login。2、配置SigningKey、ExpireSeconds。创建配置类JWTOptions。1、目前SignalR问题:谁都能连。原创 2022-10-27 17:41:33 · 629 阅读 · 0 评论 -
Recall ABP:事件的概念 领域事件/集成事件
1.代码会随着需求的增加而持续膨胀。比如增加功能“如果用户回复的答案中有涉嫌违法的内容,则先把答案隐藏,并且通知审核人员进行审核”。1、DDD中的事件分为两种类型:领域事件(Domain Events)和集成事件(Integration Events)。2、当有人回复了用户的提问的时候,系统就向提问者的邮箱发送通知邮件。2、领域事件:在同一个微服务内的聚合之间的事件传递。3、集成事件:跨微服务的事件传递。比如把“发送邮件”改成“发送短信”,怎么办?1、“当发生某事件的时候,执行某个动作”。原创 2022-10-13 21:11:17 · 253 阅读 · 0 评论 -
AutoMapper:反向映射和复杂化,DTO Entity
AutoMapper会根据原来的扁平化自动将反向映射到。如果您使用MapFrom,AutoMapper只要MapFrom路径是成员访问器,AutoMapper将从相同路径(=>如果您需要自定义这个,对于反向映射,您可以使用ForPath对于大多数情况下,你不应该需要这个,因为原来的MapFrom将会颠倒过来。当获取和设置值的路径不同时使用ForPath。如果您不需要unflattening行为,则可以将此调用移除,链式调用到ReverseMap并创建两个单独的映射。或者,您可以使用Ignore。原创 2022-10-08 15:19:40 · 663 阅读 · 0 评论 -
关于SignalR的内容延续:1.协商协议 2.分布式部署
“SingalR是对webSocekt的封装”,这句话是片面的。因为:SignalR支持多种服务器推送方式:Websocket、Server-Sent Events、长轮询。默认按顺序尝试。为什么支持多种?因为有些浏览器不支持webSocekt。原创 2022-09-26 21:14:32 · 1308 阅读 · 0 评论 -
长轮询问题在ABP中的解决方案,SignalR
问题来源:前端请求后端动态生成资源的一种解决方案,防止http请求处于waiting态导致的499错误_董厂长的博客-优快云博客此问题自己的实现方式是长轮询,但是实际效果不够好。原创 2022-09-25 22:41:44 · 1495 阅读 · 0 评论 -
理解一下C#的异步编程方式
await必须用来修饰Task或Task,而且只能出现在已经用async关键字修饰的异步方法中。使用await关键字后,.NET会自动把返回结果包装在一个Task类型的对象中。net4.0在ThreadPool的基础上推出了Task,Task拥有线程池的优势,同时也解决了使用线程池不易控制的弊端。async用来修饰方法,表明这个方法是异步的,声明的方法的返回类型必须为:void,Task或Task。,而且只能出现在已经用async关键字修饰的异步方法中。原创 2022-09-20 11:02:55 · 1501 阅读 · 0 评论 -
前端请求后端动态生成资源的一种解决方案,防止http请求处于waiting态导致的499错误
优化思路:将query和excel的生成下沉到domain层,然后前端发送http请求的时候,后端发一个eventbus,马上断开链接。我的第一反应是,为啥我在其他网站下载文件时候就可以在下载栏慢慢下载,到了我这就会卡死。这就导致一个问题,当数据量过大,3000条数据左右,http请求一直在连接中,导致报了499错误。很清楚,一般公司的对动态生成大文件的处理方式,让后端慢慢处理,然后通过一个类似邮件服务器再发送给用户。动态生成指的是:后端先通过过滤条件获得需要的数据,然后不断地插入到excel表格中。原创 2022-09-16 18:04:27 · 849 阅读 · 2 评论 -
ABP: 重新理解一下RabbitMQ,了解一下ABP中如何使用第三方事件总线
TCP连接的建立是非常消耗资源的,所以RabbitMQ在TCP连接的基础上构建了虚拟的信道。红色部分很容易理解,实际公司项目中经常遇见其他微服务掉链子的情况,等重新上线了,消息不能丢失,等事件总线继续推送过来就好了。优点:即使消费者不在线,消费者相关的消息也会被保存到队列中,当消费者上线之后,消费者就可以获取到离线期间错过的消息。2)队列(Queue):用来进行消息收发的地方,生产者把消息放到队列中,消费者从队列中获取数据。当我们面临集成事件的时候,就需要一个第三方的消息服务来给我们当个跑腿的。原创 2022-09-15 23:51:45 · 2290 阅读 · 2 评论