权限管理系统快速开发框架落地-后台项目搭建

博主以前做Java开发,现在技术转型到.net。为了能快速熟悉、掌握.net,学以致用,所以计划做一个权限管理系统。

我们先从MVC架构做起,后面会转成DDD架构模式。这篇合集会记录整个开发过程以及碰到的问题,也会记录一些Java和.net的区别。

今天我们先从第一步入手,项目搭建。

源码地址(https://gitee.com/fz0066/quick-admin)

IDE毫无疑问选择Visual Studio 2022,框架选择.net7。

一、打开VS2022,新建项目,选择.Net Core Web Api模板(前后端分离)。

不勾选“Configure for HTTPS”。“Use controllers”建议勾选,它会帮我们自动生成一个Controller类,虽然实际项目并不会用到这个类,我们可以把它当做demo,方便测试,并可以作为参照开发我们自己的Controller类。勾选“Enable OpenApi support”会自动集成swagger框架,如不需要可不勾选(后面如果需要添加swagger也可手动添加)。

项目结构非常简洁,一个WeatherForecastController类,一个WeatherForecast实体类,还有一个Program.cs。Controller类比较简单不再详细介绍。

Program就是项目启动运行的入口,相当于main函数。但是它没有main函数,自 Visual Studio 2022 或 .NET6 开始,main被省略了,是微软的新科技叫顶级语句(Top-level statements - programs without Main methods)

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllers();// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen();

var app = builder.Build();

// Configure the HTTP request pipeline.if (app.Environment.IsDevelopment()){    app.UseSwagger();    app.UseSwaggerUI();}

app.UseAuthorization();

app.MapControllers();

app.Run();

二、编译运行。

.Net Core同Spring Boot一样都是自宿主程序,不必在IIS内部托管。

.NET6 开始,.NET Croe API 项目取消了 Startup.cs 文件,在 Program.cs 文件的 中完成服务的注册和中间件的管理。但当我们项目引入很多包的时候,Program.cs 也会变得臃肿。届时我们可以把中间件的管理移植到单独的类或项目中管理(后续做到时再讲)。

三、添加需要的中间件:Serilog、SqlSugar和Autofac。

1、添加Serilog日志支持

Serilog是.Net平台上非常好用的结构化日志类库。跟log4net和nlog相比,Serilog记录结构化日志更加方便,可以对日志内容自定义格式输出,方便查询和使用。

你可能会注意到WeatherForecastController类中已经注入了Microsoft.Extensions.Logging.ILogger,如果你想移除它,可以在.csproj文件中添加如下语句。

<ItemGroup>   
    <Using Remove="Microsoft.Extensions.Logging" />
</ItemGroup>

通过NuGet搜索安装Serilog。安装成功,你可以在Dependecies-Packages目录下看到。

打开Program.cs,添加如下代码注入Serilog服务。

#region 初始化SerilogLog.Logger = new LoggerConfiguration()       .MinimumLevel.Debug()       .WriteTo.File(Path.Combine("Logs", @"log.txt"), rollingInterval: RollingInterval.Day)       .CreateLogger();#endregion

这样可以在需要使用日志的地方直接调用Log.Debug(…)、Log.Information(…)或Log.Error(…)。

日志文件目录,自动按日期生成。

如果你习惯使用依赖注入的方式调用Serilog,在注入Serilog服务时还要额外添加一行代码。

#region 初始化
SerilogLog.Logger = new LoggerConfiguration()       
.MinimumLevel.Debug()       
.WriteTo.File(Path.Combine("Logs", @"quick-admin-log.txt"), rollingInterval: RollingInterval.Day)       
.CreateLogger();
// 使用注入的方式添加
builder.Services.AddSingleton(Log.Logger);
#endregion

Controller中调用。

private readonly ILogger _logger;
public WeatherForecastController(ILogger logger)
{ 
_logger = logger;
}

...

_logger.Debug("log info");

2、添加ORM框架SqlSugar支持。

Sqlsugar便是.NET性能和易用性的代表之一,不同于EF的设计思想,它更加简单易用功能更全,可以说是一个性能更强、更轻量的ORM框架。

同样的方法使用NuGet搜索安装SqlSugar,然后配置数据库链接、用户名密码等等,打开appsetting.json添加如下语句。

{  
    "ConnectionStrings": 
    {   
        "SugarConnectString": "server=localhost;Database=test;Uid=root;Pwd=root;"  
    }
}

在Program.cs中注入服务。

//引入配置文
var _config = new ConfigurationBuilder()                 
.SetBasePath(basePath)                 
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)                 .Build();
#region 注入ORM服务
builder.Services.AddScoped(options =>{    
return new SqlSugarClient(new List<ConnectionConfig>()    { 
new ConnectionConfig() { 
ConfigId = DBEnum.默认数据库, ConnectionString = _config.GetConnectionString("SugarConnectString"), DbType = DbType.MySql, IsAutoCloseConnection = true }    
});
});
#endregion

建议创建一个读取配置文件的工具类,在需要用到的地方调用工具类获取配置。

好了,SqlSugar添加成功了。详细的使用方法可参考官网或者我项目的源代码。

3、添加Autofac(依赖注入框架)

为什么要用Autofac?

  1. 丰富注册(服务组件与实现的配置)方式:RegisterType、RegisterAssemblyTypes、Autofac.Module
  2. 注入方式:构造函数、属性
  3. 生命周期:瞬时、单例、范围
  4. 支持面向切面编程

首先还是安装Autofac依赖,然后在Program.cs中注入服务。

#region 使用
autofacbuilder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
builder.Host.ConfigureContainer<ContainerBuilder>(builder =>{    Assembly assembly = Assembly.Load(ServiceCore.GetAssemblyName());

builder.RegisterAssemblyTypes(assembly)    
// 先注册Service和DAO注入    
.Where(a => (a.Name.EndsWith("Service") || a.Name.EndsWith("Dao")))    .AsImplementedInterfaces()    
.InstancePerDependency()    
.PropertiesAutowired(PropertyWiringOptions.AllowCircularDependencies);});
#endregion

ServiceCore源代码

public static class ServiceCore{    
public static string GetAssemblyName()    {        Console.WriteLine(Assembly.GetExecutingAssembly().GetName().Name); 
return Assembly.GetExecutingAssembly().GetName().Name;    
}  
}

到这里,项目创建完成了,编译运行。

后面我会专门写一篇文章介绍Autofac的使用。

源码地址(https://gitee.com/fz0066/quick-admin

我的微信:zhouxf2719,谢绝闲聊。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值