博客园 - 饭勺oO
uuid:24b78886-0ed1-41c2-8670-e3f31dcf42c4;id=17800
2024-03-28T08:21:09Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
feed.cnblogs.com
https://www.cnblogs.com/fanshaoO/p/18101930
学习Source Generators之IIncrementalGenerator - 饭勺oO
前面我们用ISourceGenerator来实现代码生成。但是在官方的介绍中有这么一个警告:Warning: Source generators implementing ISourceGenerator have been deprecated in favor of incremental ge
2024-03-28T07:55:00Z
2024-03-28T07:55:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面我们用ISourceGenerator来实现代码生成。但是在官方的介绍中有这么一个警告:Warning: Source generators implementing ISourceGenerator have been deprecated in favor of incremental ge <a href="https://www.cnblogs.com/fanshaoO/p/18101930" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/18101185
学习Source Generators之HelloWorld - 饭勺oO
介绍 源生成器是 C# 开发人员可以编写的一种新组件,允许执行两个主要操作: 检索表示正在编译的所有用户代码的编译对象。 可以检查此对象,并且可以编写适用于正在编译的代码的语法和语义模型的代码,就像现在使用分析器一样。 生成可在编译过程中添加到编译对象的 C# 源文件。 也就是说,在编译代码时,可以
2024-03-28T03:21:00Z
2024-03-28T03:21:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】介绍 源生成器是 C# 开发人员可以编写的一种新组件,允许执行两个主要操作: 检索表示正在编译的所有用户代码的编译对象。 可以检查此对象,并且可以编写适用于正在编译的代码的语法和语义模型的代码,就像现在使用分析器一样。 生成可在编译过程中添加到编译对象的 C# 源文件。 也就是说,在编译代码时,可以 <a href="https://www.cnblogs.com/fanshaoO/p/18101185" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/18044824
项目需要实现国际化?不妨来试试它 - 饭勺oO
之前造了一个多语言国际化的轮子,第一个版本UI的体验感不是太好,用blazor重新实现了一个UI,体验感应该还算不错。 LinguaNex LinguaNex是一个多语言连接中心,主打一个一处配置多语言,多处使用的想法。让项目方便快捷实现国际化(多语言)。 可配关联项目,主项目关联其他项目即可获取其
2024-02-29T09:26:00Z
2024-02-29T09:26:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】之前造了一个多语言国际化的轮子,第一个版本UI的体验感不是太好,用blazor重新实现了一个UI,体验感应该还算不错。 LinguaNex LinguaNex是一个多语言连接中心,主打一个一处配置多语言,多处使用的想法。让项目方便快捷实现国际化(多语言)。 可配关联项目,主项目关联其他项目即可获取其 <a href="https://www.cnblogs.com/fanshaoO/p/18044824" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17982859
单层应用升级到多层应用3 - 饭勺oO
接上文,我们已经初步完成了单层到多层的拆分,接下来就是再优化我们的结构了。 升级思路 在前文的Core项目中,包含了我们所有的基础功能,但是有些项目可能只需要部分功能却引用整一块Core的话,会显得有些多余,需要将这部分基础设施再做一下细致化的拆分。 在Host项目中,仍旧还有许多功能代码没有拆分,
2024-01-23T08:54:00Z
2024-01-23T08:54:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】接上文,我们已经初步完成了单层到多层的拆分,接下来就是再优化我们的结构了。 升级思路 在前文的Core项目中,包含了我们所有的基础功能,但是有些项目可能只需要部分功能却引用整一块Core的话,会显得有些多余,需要将这部分基础设施再做一下细致化的拆分。 在Host项目中,仍旧还有许多功能代码没有拆分, <a href="https://www.cnblogs.com/fanshaoO/p/17982859" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17980628
单层应用升级到多层应用2 - 饭勺oO
接上文,我们已经粗略的拆分了单层应用,主要讲一些基础设施功能代码抽离出去,但是业务代码部分还是比较臃肿。 接下来就准备将业务部分抽离一下。 思路 前面将一些基础的部分抽离出去了,接下来就是业务和API方面,这里准备再抽离出两个类库。分别是Api和Application。 Api主要是接口部分的代码。
2024-01-22T09:51:00Z
2024-01-22T09:51:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】接上文,我们已经粗略的拆分了单层应用,主要讲一些基础设施功能代码抽离出去,但是业务代码部分还是比较臃肿。 接下来就准备将业务部分抽离一下。 思路 前面将一些基础的部分抽离出去了,接下来就是业务和API方面,这里准备再抽离出两个类库。分别是Api和Application。 Api主要是接口部分的代码。 <a href="https://www.cnblogs.com/fanshaoO/p/17980628" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17980452
单层应用升级到多层应用1 - 饭勺oO
前面我们已经逐步完善了我们的单层应用,但是随着复杂度提升,单层应用逐渐变得臃肿。为了更好地应对日益增长的业务需求和保持应用的可维护性,我们需要考虑将单层应用升级为多层应用。 升级思路 在单层应用中,我们讲基础设施的功能以及业务功能都写在同一个项目中,这将使得后期复杂度越来越高,可维护性越来越低。 首
2024-01-22T08:52:00Z
2024-01-22T08:52:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面我们已经逐步完善了我们的单层应用,但是随着复杂度提升,单层应用逐渐变得臃肿。为了更好地应对日益增长的业务需求和保持应用的可维护性,我们需要考虑将单层应用升级为多层应用。 升级思路 在单层应用中,我们讲基础设施的功能以及业务功能都写在同一个项目中,这将使得后期复杂度越来越高,可维护性越来越低。 首 <a href="https://www.cnblogs.com/fanshaoO/p/17980452" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17944667
助力项目快捷实现国际化,造个多语言轮子 - 饭勺oO
前段时间跟同事吹水聊天时,吐槽一个话题,就是公司项目都需要做多语言,前端后端都需要做。 而且是需要支持8国语言翻译,每次弄起来都特麻烦,每加一个Key就需要去翻译其他7个语言出来添加,每新增一个项目就需要弄一遍多语言资源,重复且枯燥费时的体力活。 项目想法 本项目主打一个一处配置多语言,多处使用的想
2024-01-04T02:19:00Z
2024-01-04T02:19:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前段时间跟同事吹水聊天时,吐槽一个话题,就是公司项目都需要做多语言,前端后端都需要做。 而且是需要支持8国语言翻译,每次弄起来都特麻烦,每加一个Key就需要去翻译其他7个语言出来添加,每新增一个项目就需要弄一遍多语言资源,重复且枯燥费时的体力活。 项目想法 本项目主打一个一处配置多语言,多处使用的想 <a href="https://www.cnblogs.com/fanshaoO/p/17944667" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17789757.html
造轮子之单层应用总结篇 - 饭勺oO
在前面的篇章中,我们一起探讨了单层应用,从基础设施的建设到实现各种业务功能,我们的单层应用经历了一次又一次的进化。让我们来回顾一下我们所实现的一些重要功能。 首先,我们在基础设施方面取得了巨大的进展。我们实现了自动依赖注入,这个神奇的技术让我们能够轻松管理各个模块之间的依赖关系,提高了代码的可维护性
2023-10-26T08:32:00Z
2023-10-26T08:32:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】在前面的篇章中,我们一起探讨了单层应用,从基础设施的建设到实现各种业务功能,我们的单层应用经历了一次又一次的进化。让我们来回顾一下我们所实现的一些重要功能。 首先,我们在基础设施方面取得了巨大的进展。我们实现了自动依赖注入,这个神奇的技术让我们能够轻松管理各个模块之间的依赖关系,提高了代码的可维护性 <a href="https://www.cnblogs.com/fanshaoO/p/17789757.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17781914.html
造轮子之文件管理 - 饭勺oO
前面我们完成了设置管理,接下来正好配合设置管理来实现文件管理功能。文件管理自然包括文件上传,下载以及文件存储功能。设计要求可以支持扩展多种存储服务,如本地文件,云存储等等。 数据库设计 首先当然是我们的数据库表设计,用于管理文件。创建一个文件信息存储表。 using Wheel.Domain.Com
2023-10-23T02:57:00Z
2023-10-23T02:57:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面我们完成了设置管理,接下来正好配合设置管理来实现文件管理功能。文件管理自然包括文件上传,下载以及文件存储功能。设计要求可以支持扩展多种存储服务,如本地文件,云存储等等。 数据库设计 首先当然是我们的数据库表设计,用于管理文件。创建一个文件信息存储表。 using Wheel.Domain.Com <a href="https://www.cnblogs.com/fanshaoO/p/17781914.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17774390.html
造轮子之设置管理 - 饭勺oO
前面我们基础设施基本搭建完毕,后面可以做一些稍微复杂点的功能了,接下来就来实现一个设置管理。设置管理一般用做一些系统设置之类的,如邮箱配置等,面向使用人员。而不需要修改我们的配置文件,修改配置文件的方式就偏向于技术人员了。话不多说,开造。 设计结构 设置管理中需要2个表,一个是设置组表,比如什么邮箱
2023-10-19T03:44:00Z
2023-10-19T03:44:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面我们基础设施基本搭建完毕,后面可以做一些稍微复杂点的功能了,接下来就来实现一个设置管理。设置管理一般用做一些系统设置之类的,如邮箱配置等,面向使用人员。而不需要修改我们的配置文件,修改配置文件的方式就偏向于技术人员了。话不多说,开造。 设计结构 设置管理中需要2个表,一个是设置组表,比如什么邮箱 <a href="https://www.cnblogs.com/fanshaoO/p/17774390.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17767098.html
造轮子之集成GraphQL - 饭勺oO
先简单对比以下GraphQL和WebAPI:GraphQL和Web API(如RESTful API)是用于构建和提供Web服务的不同技术。 数据获取方式: Web API:通常使用RESTful API,客户端通过发送HTTP请求(如GET、POST、PUT、DELETE)来获取特定的数据。每个请
2023-10-16T09:25:00Z
2023-10-16T09:25:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】先简单对比以下GraphQL和WebAPI:GraphQL和Web API(如RESTful API)是用于构建和提供Web服务的不同技术。 数据获取方式: Web API:通常使用RESTful API,客户端通过发送HTTP请求(如GET、POST、PUT、DELETE)来获取特定的数据。每个请 <a href="https://www.cnblogs.com/fanshaoO/p/17767098.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17766929.html
造轮子之种子数据 - 饭勺oO
在前面我们基本把应用框架的基础设施搭建完成。接下来我们就得着手处理一下种子数据的问题。在一个基础框架里面,种子数据很重要,比如一些基础数据,初始用户等等,这些都需要初始化,否则程序启动却无法使用就很尴尬了。 IDataSeeder 首先定义一个种子数据接口 using Wheel.Dependenc
2023-10-16T03:08:00Z
2023-10-16T03:08:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】在前面我们基本把应用框架的基础设施搭建完成。接下来我们就得着手处理一下种子数据的问题。在一个基础框架里面,种子数据很重要,比如一些基础数据,初始用户等等,这些都需要初始化,否则程序启动却无法使用就很尴尬了。 IDataSeeder 首先定义一个种子数据接口 using Wheel.Dependenc <a href="https://www.cnblogs.com/fanshaoO/p/17766929.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17762227.html
造轮子之消息实时推送 - 饭勺oO
前面我们的EventBus已经弄好了,那么接下来通过EventBus来实现我们的消息推送就是自然而然的事情了。说到消息推送,很多人肯定会想到Websocket,既然我们使用Asp.net core,那么SignalR肯定是我们的首选。接下来就用SignalR来实现我们的消息实时推送。 Notific
2023-10-13T07:26:00Z
2023-10-13T07:26:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面我们的EventBus已经弄好了,那么接下来通过EventBus来实现我们的消息推送就是自然而然的事情了。说到消息推送,很多人肯定会想到Websocket,既然我们使用Asp.net core,那么SignalR肯定是我们的首选。接下来就用SignalR来实现我们的消息实时推送。 Notific <a href="https://www.cnblogs.com/fanshaoO/p/17762227.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17759947.html
造轮子之EventBus - 饭勺oO
前面基础管理的功能基本开发完了,接下来我们来优化一下开发功能,来添加EventBus功能。EventBus也是我们使用场景非常广的东西。这里我会实现一个本地的EventBus以及分布式的EventBus。分别使用MediatR和Cap来实现。 现在简单介绍一下这两者:MediatR是一个轻量级的中介
2023-10-12T09:53:00Z
2023-10-12T09:53:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面基础管理的功能基本开发完了,接下来我们来优化一下开发功能,来添加EventBus功能。EventBus也是我们使用场景非常广的东西。这里我会实现一个本地的EventBus以及分布式的EventBus。分别使用MediatR和Cap来实现。 现在简单介绍一下这两者:MediatR是一个轻量级的中介 <a href="https://www.cnblogs.com/fanshaoO/p/17759947.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17759225.html
造轮子之属性注入配合懒加载构建服务抽象基类 - 饭勺oO
在前面实现管理API的时候,可以看到我们用的挺多功能是没有通过构造函数注入的。比如缓存DistributedCache,MemoryCache,对象映射Mapper,多语言L,当前用户CurrentUser等等。这些全都初始化在WheelServiceBase以及WheelControllerBas
2023-10-12T04:16:00Z
2023-10-12T04:16:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】在前面实现管理API的时候,可以看到我们用的挺多功能是没有通过构造函数注入的。比如缓存DistributedCache,MemoryCache,对象映射Mapper,多语言L,当前用户CurrentUser等等。这些全都初始化在WheelServiceBase以及WheelControllerBas <a href="https://www.cnblogs.com/fanshaoO/p/17759225.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17759180.html
造轮子之菜单管理 - 饭勺oO
前面完成了基础管理的相关API,接下来就得做一个菜单管理了,用于对接管理后台前端界面。 设计菜单结构 菜单是一个多级结构,所以我们得设计一个树形的。包含自己上级和下级的属性。同时预留Permission用于做可选的权限限制。 namespace Wheel.Domain.Menus { /// <s
2023-10-12T03:50:00Z
2023-10-12T03:50:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】前面完成了基础管理的相关API,接下来就得做一个菜单管理了,用于对接管理后台前端界面。 设计菜单结构 菜单是一个多级结构,所以我们得设计一个树形的。包含自己上级和下级的属性。同时预留Permission用于做可选的权限限制。 namespace Wheel.Domain.Menus { /// <s <a href="https://www.cnblogs.com/fanshaoO/p/17759180.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17759176.html
造轮子之用户管理 - 饭勺oO
跟角色管理一样,asp.net core identity中已经包含了UserManager,我们只需要简单包装一下逻辑即可完成我们的用户管理相关功能。 这里只打算添加分页查询,创建以及修改用户的API,不提供删除API。 实现UserManageAppService IUserManageAppS
2023-10-12T03:50:00Z
2023-10-12T03:50:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】跟角色管理一样,asp.net core identity中已经包含了UserManager,我们只需要简单包装一下逻辑即可完成我们的用户管理相关功能。 这里只打算添加分页查询,创建以及修改用户的API,不提供删除API。 实现UserManageAppService IUserManageAppS <a href="https://www.cnblogs.com/fanshaoO/p/17759176.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17759173.html
造轮子之角色管理 - 饭勺oO
在asp.net core identity中已经有RoleManager,我们只需要封装一下API操作Role即可完成我们角色管理相关功能,这里API打算只提供分页查询,创建以及删除,不提供修改API。 实现RoleManageAppService IRoleManageAppService na
2023-10-12T03:49:00Z
2023-10-12T03:49:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】在asp.net core identity中已经有RoleManager,我们只需要封装一下API操作Role即可完成我们角色管理相关功能,这里API打算只提供分页查询,创建以及删除,不提供修改API。 实现RoleManageAppService IRoleManageAppService na <a href="https://www.cnblogs.com/fanshaoO/p/17759173.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17757078.html
造轮子之多语言管理 - 饭勺oO
多语言也是我们经常能用到的东西,asp.net core中默认支持了多语言,可以使用.resx资源文件来管理多语言配置。但是在修改资源文件后,我们的应用服务无法及时更新,属实麻烦一些。我们可以通过扩展IStringLocalizer,实现我们想要的多语言配置方式,比如Json配置,PO 文件配置,E
2023-10-11T06:49:00Z
2023-10-11T06:49:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】多语言也是我们经常能用到的东西,asp.net core中默认支持了多语言,可以使用.resx资源文件来管理多语言配置。但是在修改资源文件后,我们的应用服务无法及时更新,属实麻烦一些。我们可以通过扩展IStringLocalizer,实现我们想要的多语言配置方式,比如Json配置,PO 文件配置,E <a href="https://www.cnblogs.com/fanshaoO/p/17757078.html" target="_blank">阅读全文</a>
https://www.cnblogs.com/fanshaoO/p/17754156.html
造轮子之权限管理 - 饭勺oO
上文已经完成了自定义授权策略,那么接下来就得完善我们的权限管理了。不然没有数据,如何鉴权~ 表设计 创建我们的表实体类: namespace Wheel.Domain.Permissions { public class PermissionGrant : Entity<Guid> { public
2023-10-10T03:11:00Z
2023-10-10T03:11:00Z
饭勺oO
https://www.cnblogs.com/fanshaoO/
【摘要】上文已经完成了自定义授权策略,那么接下来就得完善我们的权限管理了。不然没有数据,如何鉴权~ 表设计 创建我们的表实体类: namespace Wheel.Domain.Permissions { public class PermissionGrant : Entity<Guid> { public <a href="https://www.cnblogs.com/fanshaoO/p/17754156.html" target="_blank">阅读全文</a>