一、搭建这个项目的原因和目的
- 突然感觉我个人太没有韧性了,写博客老是坚持不到两周没了草草结束,而且还爱找各种理由:没时间(虽然时间比较紧,但是就是不肯去挤)。
- 心太大,老是想大而全,不脚踏实地,都是空中楼阁,因此想从基础搭建。
- 想形成一个工具包,慢慢不断完善,方便自己简单项目的使用。
- 温故而知新嘛,写出来有错漏还能给网友鞭笞,个人不怕错,不怕骂,有争议才有进步,但是请别侮辱我,虽然水平有限。
二、这个项目的目标或者说结果
- 最起码实现:一个简单带权限控制的webapi(这些通用性强的,做个模板)
- 很有肯能实现:后台管理界面(吐槽:完整的后台管理系统烂大街,你还搞这?)
- 如果有可能还会实现:搭建一个前台界面
- 希望以上都能实现,然后集合成一个项目(这个全网目前都没人这么干,特么前后端分离还搞集合,原因是省时省力)
三、技术栈简介
- asp.net core webapi(.net版本直接5.0起步,后期如果升级再回来改)
- Microsoft.EntityFrameworkCore 5.x(直接微软的efcore框架,方便切换数据库,模板使用Sqlite数据库)
- swagger(api项目必备啊,不想写文档啊,方便接入啊)
- autofac(依赖注入框架还是要的)
- automapper(类型转换用)
- newtonsoft.json(json序列化工具)
前端的话不一定实现,先考虑把,到时候有时间来个react全家桶或者vue全家桶,不立flag,不然老是心太大,不能脚踏实地
四、项目搭建(我这里目录比较深,源码托管直接托管解决方案项目)
备注:我用的是windows10
系统,但是我安装了git bash
(安装git
的时候勾选的linux
风格),所以我cmd
能用大部分linux
命令,很简单就是环境变量Path
添加两个值C:Program FilesGitmingw64in
和C:Program FilesGitusrin
# 在要创建模板的目录打开cmd,个人不习惯powershell,毕竟直接在目录上输入三个字母和十个字母还是有区别的
# 创建模板列表文件夹,以后不止一个模板,我项目是准备打包成模板的
md temple
# 进入模板列表文件夹
cd temple
# 创建第一个模板文件夹SimpleApiTemple
md SimpleApiTemple
# 进入第一个模板文件夹SimpleApiTemple
cd SimpleApiTemple
# 创建解决方案文件夹content,当然下面几步也可以用visual studio等IDE工具去创建整个项目,我嫌太慢,直接命令
md context
# 进入解决方案文件夹
cd context
# 创建解决方案,请确保安装.net core sdk(visual studio 2019最新版安装web开发就自带了,没安装的也可以去微软官网下载安装)
dotnet new sln -n Nest
# 开始创建仓储三层
# webapi层,我的skd是.net 5(.net core 3.x的下一个版本就是.net 5,哈哈没有core了)
dotnet new webapi -n Nest.WebApi
# 业务访问层,我就不叫BLL了
dotnet new classlib -n Nest.Application
# 创建数据访问层,不对叫基础设施层好点,算了直接核心层
dotnet new classlib -n Nest.Core
# 把项目都加到解决方案里面,linux下记得把反斜杠改为斜杠
dotnet sln add .Nest.WebApiNest.WebApi.csproj
dotnet sln add .Nest.ApplicationNest.Application.csproj
dotnet sln add .Nest.CoreNest.Core.csproj
五、添加项目依赖
- 用
visual studio
(后面全部简称vs
)打开Nest.sln
解决方案 Nest.WebApi
引用Nest.Application
,直接双击Nest.WebApi
项目名,在Project
节点下添加ItemGourp
节点,再在添加的ItemGroup
节点下添加项目引用节点ProjectReference
属性为被引用项目的csproj
地址Nest.Application
引用Nest.Core
,操作同上- 开始从
nuget
安装依赖包,菜单栏找到工具
->Nuget包管理器
->程序包管理控制台
当然也可以直接点下面的管理解决方案的nuget程序包
去安装,这里直接控制台安装 - 注意选择对应的项目
- 默认项目选择
Nest.Core
Install-Package Microsoft.EntityFrameworkCore.Sqlite
Install-Package Microsoft.AspNetCore.Mvc.NewtonsoftJson
- 默认项目选择
Application
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection
- 默认项目选择
Nest.WebApi
Install-Package Autofac.Extensions.DependencyInjection
Install-Package Autofac.Extras.DynamicProxy
最终三个项目的csproj后缀的项目文件如下(swagger在新建.net5的webapi已经自带):
Nest.Core
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.NewtonsoftJson" Version="5.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.6" />
</ItemGroup>
</Project>
Application
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..Nest.CoreNest.Core.csproj" />
</ItemGroup>
</Project>
Nest.WebApi
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Autofac.Extensions.DependencyInjection" Version="7.1.0" />
<PackageReference Include="Autofac.Extras.DynamicProxy" Version="6.0.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..Nest.ApplicationNest.Application.csproj" />
</ItemGroup>
</Project>
现在把Nest.WebApi
运行测试一下,当然个人比较喜欢kestrel
方式启动,我会删了iis的配置,我的Nest.WebApi
项目下Properties
文件夹的launchSettings.json
文件内容如下
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"Nest.WebApi": {
"commandName": "Project",
"dotnetRunMessages": "true",
"launchBrowser": true,
"launchUrl": "swagger",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
六、加入git版本控制,上传码云(其它的后续再说)
- 在码云新建个空仓库,仓库名称SimpleApiTemple,选择开源,直接创建,然后再已有仓库一栏中,复制下面第二行origin后面的地址
vs
菜单点击git
(新版本vs
才有,老版本在团队资源管理器,建议更新)->创建git存储库
,选择远程仓库,把上面的地址黏贴到远程仓库
后面的RemoteUrl
,点击创建推送,仓库地址:https://gitee.com/shuisen/simple-api-temple.git
开篇总算完结,这里解释下为啥不直接git init
去创建git
版本控制,因为你要自己去写.gitignore
忽略文件去忽略比如生成的dll
啊什么的,我最不喜欢svn
的地方就是得自己管理忽略。
下篇预告:仓储三层实践:02swagger配置注释文件