开源项目分享-基于.Net5的快速开发框架Furion
xsobi 2025-01-05 20:44 1 浏览
最近.NET 6.0发布了最新的.NET 6.0.100-preview2,去年发布的.NET 5.0版本已趋于稳定,其最新Release版本5.0.4。DOTNET生态涌现出很多不错的框架如ABP等,今天在gitee码云上发现一个不错的.NET 5 企业级应用开发框架Furion
Furion简介
Furion定位是让 .NET 开发更简单,更通用,更流行,目前Furion已捐赠给dotNET China(dotNET China下有SqlSugar ORM、BootstrapAdmin等优秀的GVP项目)。
框架特点:
基于 .NET 5 平台、内置丰富的企业应用开发功能、框架只依赖两个第三方包、极其灵活轻松面对多变复杂的需求、极易维护采用独特的架构思想、提供完善的开发文档
Furion开发体验-项目创建
使用VS2019新建ASP.NET Core Web应用程序,选择新建API项目(取消勾选Docker支持,电脑上没有Docker Desktop的话安装配置非常慢),Furion已经内置了 Swagger 规范化库,所以创建时无需勾选 “启用OpenAPI支持(O)”选项。 项目新建完成后,在NuGet包管理器中添加Furion的依赖,包安装成功后我们修改Program.cs、Startup.cs2个类文件添加Inject()即可。
我们在NuGet里面搜索Furion,发现除了Furion外,还有Furion.Template.*、Furion.Extras.*为应用类型的模板脚手架,方便快速创建多层架构项目。
Furion推荐使用官方脚手架来新建项目,不需要自己手动搭建分层项目。
我们使用Furion.Template.Api搭建一个WebApi工程FurionDemo,首先我们安装模板
dotnet new --install Furion.Template.Api::1.15.0 ,然后使用模板创建自己的项目,从上图可知Furion.Template.Api对应的关键词为furionapi,所以对应的命令为:dotnet new furionapi -n FurionDemo,执行完毕后我们发现已经创建FurionDemo的解决方案:
我们可以看到解决方案里总共有6个项目,Web.Entry是应用入口,启动项目后浏览器默认打开的是项目的swagger接口管理页面。
Furion开发体验-配置读取
读取appsettings.json,Furion提供了2种读取方式:1.依赖注入 IConfiguration对象读取(构造函数注入方式、参数注入方式、属性注入方式)、2.通过 App.Configuration[jsonKey] 读取(读取JSON多层节点可以通过路径符查找节点),另外Furion还支持xml配置文件的自动读取(文件名以.config.xml结尾)
{
"MyInfo": {
"Name": "Furion",
"Setting": {
"Name": "Furion",
}
}
}
//读取Setting对应的Name
var companyName = App.Configuration["MyInfo:Setting:Name"];
Furion开发体验-动态 WebAPI
上面新建的FurionDemo工程我们看到,FurionDemo.Application项目的SystemAppService类,继承了IDynamicApiController,直接将服务暴露到控制器层(动态WebAPI),无需再编写控制器,暴露的业务方法支持各种http请求谓词,Furion的文档上有详细介绍。
Furion开发体验-其他特性
Furion提供了规范化接口文档(Swagger集成):
Furion提供了非常方便且灵活的 Swagger 配置,无需增加额外的学习成本。另外通过在服务类上设置 [ApiDescriptionSettings("分组名称")] 即可方便地实现Swagger接口文档自动分组。
友好的异常处理:
Furion通过AddFriendlyException()注册全局的异常处理,代码中使用throw Oops.Oh("异常信息")、throw Oops.Oh("异常信息", typeof(InvalidOperationException)) 可以手动抛出异常,
优雅的数据校验方式:
Furion 框架内置的 DataValidation 验证,兼容 Mvc 特性验证(如[Range(10, 20, ErrorMessage = "")])、Required),另外Furion 提供了 TryValidate() 和 Validate() 两个验证拓展方法,ValidationTypes 添加了很多常见验证类型如(Required、Numeric、正数/负数/整数/金钱/时间/身份证/邮编/手机号/固话/邮件地址/网址/颜色值/中文/IPv4 /IPv46/图片/Ascii 格式等)
数据库操作:
数据库操作支持EFCore、SqlSugar、Dapper等,数据库操作常见的事务和工作单元、读写分离、分表分库等Furion文档上均有详细介绍和示例
支持多租户
Furion 框架支持三种多租户实现方案(独立数据库、共享数据库不同Schema 、共享数据库,相同Schema 基于TenantId 的方式)Furion文档上均有详细介绍和示例
另外Furion还有很多不错的特性,比如其缓存系统、日志记录设计、全球化本地化(多语言处理)、时间总线、任务调度、Grpc服务等等,整体上感觉还是蛮不错的,特别是Furion的文档写的很详细,想必ABP感觉轻量很多,容易上手,有兴趣的小伙伴们可以体验一下。
相关推荐
- 什么是 XML 站点地图?为什么要有它?
-
一份好的XML站点地图可以作为您网站的路线图,引导Google找到您所有的重要页面。XML站点地图对SEO非常有利,即使您的内部链接不完美,Google也能快速找到您的重要页面。这篇文...
- springboot整合mybatis使用xml实现sql语句的查询配置
-
首先肯定还是引入mybatis依赖<!--https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-b...
- IDEA 这么设置 Maven,再也不用担心依赖下载失败了
-
Hello,大家好,我是楼下小黑哥。B站视频版本...
- WordPress网站被利用xmlrpc.php攻击解决办法
-
最近看了百度云加速后台的数据报表,发现有很多针对WordPress的攻击,其实就是利用xmlrpc.php文件来攻击。虽然目前站点一切安好,但是据说如果不采取相应措施解决的话,很有可能会被这些攻击导致...
- 看大佬对Maven讲解有多深,Maven setting.xml文件 了解一下
-
通常我们安装了Maven之后会对Mavensetting.xml(Maven的配置文件做一些自定义),本章我们将详细地学习一下Mavensetting.xml文件。文件位置一般存在与Maven安装...
- XML文档篇(二):认识 xsd 文档
-
前面介绍了基于XML的DTD,详见:XML文档篇:认识DTD(一)。今天再来分享一个它的替代者,...
- Mybatis 中xml和注解映射,分分钟搞定
-
MyBatis提供了XML配置和注解配置两种方式。今天就来搞搞这两种方式是如何实现的。...
- 您的网站需要XML站点地图吗?
-
昨天有人咨询我们:“向百度提交网站地图有多重要?”首先,让我们了解一下“XML网站地图有多重要?”您是否需要XML网站地图?...
- 详细解释Xml中的Schema约束(保姆级)
-
我本人总是爱忘记这个约束,说实话不是太难,因此想写这篇文章详细记录下,希望对有同样需要的小伙伴能够提供帮助。Xml约束主要有两种:dtd约束(比较简单)schema约束(常用、复杂)dtd约束比较简单...
- HTML和xml有哪些区别?
-
HTML和XML都是用于描述和组织数据的标记语言,但它们之间有着许多区别。本文将详细介绍HTML和XML的区别,包括语法、标记、应用场景等方面。一、语法差异...
- 开源XML数据库 BaseX
-
BaseX是一个开源的XML数据库系统,包括一个前端用户操作管理界面XQueryEditor。提供高效的XPath和XQuery处理,包含了对W3CUpdate和FullText扩展的全...
- 一篇文章让你弄清楚XML文件的规范与使用
-
可扩展标记语言(ExtensibleMarkupLanguage,简称XML)是一种标记语言。所谓的标记是指计算机所能理解的信息符号,通过标记可以实现软件开发者与计算机之间的信息沟通。我们常见的H...
- Python 3 实现在线xml sitemap索引文件提取URL到指定文件
-
毫无疑问,在SEO分析网站结构和开放搜索引擎端抓取页面数时,对sitemap文件的分析是最好的入手点。通常规模不是太小的网站URL数量都会超过5万条,而搜索引擎要求单个sitemap文件的数量不能超过...
- 从零开始学Java之带你学会解析XML文件
-
一.XML简介1.概念XML(ExtensibleMarkupLanguage,可扩展的标记语言),作为一种标记语言,它是标准通用标记语言的子集。XML给我们提供了可扩展性和自定义标签的特性...
- 解除 网课失去焦点/离开页面 就自动暂停 的限制
-
用代码解决实际生活中的问题h5如果视频是video元素,可以写个定时器,每秒钟设置一下播放状态...
- 一周热门
- 最近发表
- 标签列表
-
- grid 设置 (58)
- 移位运算 (48)
- not specified (45)
- patch补丁 (31)
- 导航栏 (58)
- context xml (46)
- scroll (43)
- dedecms模版 (53)
- c 视频教程下载 (33)
- listview排序 (33)
- firebug 使用 (31)
- characterencodingfilter (33)
- getmonth (34)
- hibernate教程 (31)
- label换行 (33)
- curlpost (31)
- android studio 3 0 (34)
- android应用开发 (31)
- html转js (35)
- 索引的作用 (33)
- css3 0 (31)
- checkedlistbox (34)
- localhost 8080 (32)
- 多态 (32)
- xmlhttp (35)