初识ABP vNext(9):ABP模块化开发-文件管理
Tips:本篇已加入系列文章阅读目录,可点击查看更多相关文章。 目录
前言在之前的章节中介绍过ABP扩展实体,当时在用户表扩展了用户头像字段,用户头像就涉及到文件上传和文件存储。文件上传是很多系统都会涉及到的一个基础功能,在ABP的模块化思路下,文件管理可以做成一个通用的模块,便于以后在多个项目中复用。单纯实现一个文件上传的功能并不复杂,本文就借着这个简单的功能来介绍一下ABP模块化开发的最基本步骤。 开始创建模块首先使用ABP CLI创建一个模块: 创建完成后会得到如下文件: 在主项目中添加对应模块的引用,Application=>Application,Domain=>Domain,HttpApi=>HttpApi 等等。例如: 需要添加引用的项目:Application、Application.Contracts、Domain、Domain.Shared、EntityFrameworkCore、HttpApi、HttpApi.Client 手动添加这些引用比较麻烦,你可以搭建自己的私有NuGet服务器,把模块的包发布到私有NuGet上,然后通过NuGet来安装引用。两种方式各有优缺点,具体请参考自定义现有模块,关于私有NuGet搭建可以参考:十分钟搭建自己的私有NuGet服务器-BaGet。 然后给这些项目的模块类添加对应的依赖,例如: 通过上面的方式引用模块,使用visual studio是无法编译通过的: 需要在解决方案目录下,手动执行 模块开发接下来关于文件管理功能的开发,都在模块Xhznl.FileManagement中进行,它是一个独立的解决方案。初学ABP,下面就以尽量简单的方式来实现这个模块。 应用服务模块开发通常从Domain层实体建立开始,但是这里先跳过。先在FileManagement.Application.Contracts项目添加应用服务接口和Dto。 modulesfile-managementsrcXhznl.FileManagement.Application.ContractsFilesIFileAppService.cs:
modulesfile-managementsrcXhznl.FileManagement.Application.ContractsFilesFileUploadInputDto.cs:
然后是FileManagement.Application项目,实现应用服务,先定义一个配置类。 modulesfile-managementsrcXhznl.FileManagement.ApplicationFilesFileOptions.cs:
modulesfile-managementsrcXhznl.FileManagement.ApplicationFilesFileAppService.cs:
服务实现很简单,就是基于本地文件系统的读写操作。 下面是FileManagement.HttpApi项目,添加控制器,暴露服务API接口。 modulesfile-managementsrcXhznl.FileManagement.HttpApiFilesFileController.cs:
运行模块ABP的模板是可以独立运行的,在FileManagement.HttpApi.Host项目的模块类FileManagementHttpApiHostModule配置FileOptions: 修改FileManagement.HttpApi.Host和FileManagement.IdentityServer项目的数据库连接配置,然后启动这2个项目,不出意外的话可以看到如下界面。 FileManagement.HttpApi.Host: FileManagement.IdentityServer: 现在你可以使用postman来测试一下File的2个API,当然也可以编写单元测试。 单元测试更好的方法是编写单元测试,关于如何做好单元测试可以参考ABP源码,下面只做一个简单示例: 模块使用模块测试通过后,回到主项目。模块引用,模块依赖前面都已经做好了,现在只需配置一下FileOptions,就可以使用了。 目前FileManagement.Domain、FileManagement.Domain.Shared、FileManagement.EntityFrameworkCore这几个项目暂时没用到,项目结构也不是固定的,可以根据自己实际情况来调整。 最后本文的模块示例比较简单,只是完成了一个文件上传和显示的基本功能,关于实体,数据库,领域服务,仓储之类的都暂时没用到。但是相信可以通过这个简单的例子,感受到ABP插件式的开发体验,这是一个好的开始,更多详细内容后面再做介绍。本文参考了ABP blogging模块的文件管理,关于文件存储,ABP中也有一个BLOB系统可以了解一下。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 我如何做一个已经内置到dll中的程序集,特别是fl
- asp.net-mvc – 发送电子邮件是否属于应用程序的表示层或业
- asp.net – 确保dot.net站点始终运行
- asp.net-mvc – 如何在mvc actionlink语法中添加bootstrap图
- asp.net-mvc-3 – 与SQL Server建立连接时发生与网络相关或
- asp.net-mvc – 在另一个文件夹中捆绑的Javascript
- ASP.NET,C#后台调用前台javascript的五种方法
- asp.net – Mono有什么不适合的东西?
- asp.net – 错误:数据绑定方法(如Eval(),XPath()和Bind()只
- asp.net-mvc-4 – 如何使用SimpleMembership管理配置文件?
- asp.net – 回发时超过最大请求长度异常
- asp.net-mvc – ActionFilterAttributes是否跨线
- asp.net – 谁能告诉我在Mvc视图中@using和@Mode
- asp.net-mvc – 使用没有ORM的ASP.NET MVC
- asp.net-mvc – 如何使用图像呈现动作链接?
- asp.net-mvc – 在cshtml中折叠C#块并保存
- asp.net-mvc-3 – 如何强制MVC查看错误以使项目编
- asp.net-mvc – 使用自定义ASP.NET MVC IValuePr
- asp.net-mvc-4 – LinkedIn在MVC4中使用DotNetOp
- .net – 将RouteValueDictionary转换为匿名对象的