.Net Core 6 WebApi 项目搭建(二)

这篇具有很好参考价值的文章主要介绍了.Net Core 6 WebApi 项目搭建(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

书接上文,上文写了个简单的.net core api程序创建流程,今天来写一下简单项目搭建步骤。

一.Autofac反射程序集方式服务注册

我们这里还是使用Autofac容器,具体使用教程可参考文章《.NET Core基础知识-依赖注入(Autofac)》这篇文章介绍的比较详细了。下面我说一下在.net core6里是怎么创建注入的。

1、Autofac在.net core6里依赖注入

1.1 先导入包

.Net Core 6 WebApi 项目搭建(二)

1.2 在Program中反射程序集方式服务注册Autofac
#region Autofac程序集注入
//添加Autofac容器
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());



//builder.Host.ConfigureContainer<ContainerBuilder>(container => { container.RegisterType<LoginServices>().As<ILoginServices>(); });
//builder.Host.ConfigureContainer<ContainerBuilder>(container => { container.RegisterType<LoginRepositorys>().As<ILoginRepositorys>(); });
//.net core6 Autofac程序集扫描注入
Assembly service = Assembly.Load("Services");
Assembly repository = Assembly.Load("Repositorys");
builder.Host.ConfigureContainer<ContainerBuilder>(container =>
{
    container.RegisterAssemblyTypes(service, repository).Where(t => t.Name.EndsWith("Services"))
          .AsImplementedInterfaces();
});
builder.Host.ConfigureContainer<ContainerBuilder>(container =>
{
    container.RegisterAssemblyTypes(service, repository).Where(t => t.Name.EndsWith("Repositorys"))
    .AsImplementedInterfaces();
});
//早期.net core Autofac程序集扫描注入
//public void ConfigureContainer(ContainerBuilder builder)
//{
//    Assembly service = Assembly.Load("Services");
//    Assembly repository = Assembly.Load("Repository");
//    //containerBuilder.RegisterAssemblyTypes(service).AsImplementedInterfaces().InstancePerDependency();
//    builder.RegisterAssemblyTypes(service, repository).Where(t => t.Name.EndsWith("Service"))
//          .AsImplementedInterfaces();
//    builder.RegisterAssemblyTypes(service, repository).Where(t => t.Name.EndsWith("Repository"))
//    .AsImplementedInterfaces();
//}
#endregion

通过扫描程序集注入,我们可以达到避免一条一条注入的烦恼,这个功能也比较实用。

二.Freesql在.net core6中的使用

2.1 先导入包

.Net Core 6 WebApi 项目搭建(二)

2.1 在Program中依赖注入
#region Freesql注入

Func<IServiceProvider, IFreeSql> fsqlFactory = r =>
{

    IFreeSql fsql = new FreeSql.FreeSqlBuilder()
        .UseConnectionString(FreeSql.DataType.SqlServer, r.GetService<IConfiguration>()["ConnectionStrings:CloudDB"])
        .UseMonitorCommand(cmd => Console.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句
        .UseAutoSyncStructure(true) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。
        .Build();
    return fsql;
};
builder.Services.AddSingleton<IFreeSql>(fsqlFactory);


#endregion

var app = builder.Build();

//在项目启动时,从容器中获取IFreeSql实例,并执行一些操作:同步表,种子数据,FluentAPI等
using (IServiceScope serviceScope = app.Services.CreateScope())
{
    var fsql = serviceScope.ServiceProvider.GetRequiredService<IFreeSql>();
    //fsql.CodeFirst.SyncStructure(typeof(Topic));//Topic 为要同步的实体类//同步实体类到数据库
}

数据库链接写在了appsettings.json中,注入的话可以直接抄官方文档

    Func<IServiceProvider, IFreeSql> fsql = r =>
    {
        IFreeSql fsql = new FreeSql.FreeSqlBuilder()
            .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=freedb.db")//@"Data Source=freedb.db"这里可以直接写数据库链接语句,如果想写在appsettings.json中的话,可以看下上面我的那种写法。
            .UseMonitorCommand(cmd => Console.WriteLine($"Sql:{cmd.CommandText}"))//监听SQL语句
            .UseAutoSyncStructure(true) //自动同步实体结构到数据库,FreeSql不会扫描程序集,只有CRUD时才会生成表。
            .Build();
        return fsql;
    };
    services.AddSingleton<IFreeSql>(fsql);

三.架构分成

.Net Core 6 WebApi 项目搭建(二)

3.1 Models层

这一层就是实体类,我这里使用的是Freesql,实体类配置可查阅官方文档(也可以使用SQLSugar),这两种我比较常用。

3.2 LoginRepositorys层

这一层是用于数据处理,里面分两个文件夹,IRepositorys接口层和Repositorys实现层。具体用法如下:

//IRepositorys接口层
    public interface ILoginRepositorys
    {
        Task<int> Login(string Account,string Password);
    }
//Repositorys实现层
 public class LoginRepositorys : ILoginRepositorys
    {
        private readonly IFreeSql _fsql;
        public LoginRepositorys(IFreeSql fsql)
        {
            this._fsql = fsql;
        }
        //登录查询
        public async Task<int> Login(string Account, string Password)
        {
            var curd = (await _fsql.Select<UserInfo>().Where(x => x.Account == Account && x.Password == Password).ToListAsync()).Count();
            return curd;
        }
    }
3.3 Services层

这层就是来写业务了,里面也是分两个文件夹,IServices接口层和Services实现层。具体用法如下:

//IServices接口层
public interface ILoginServices
    {
        Task<int> Login(string Account, string Password);
    }
//Services实现层
public class LoginServices : ILoginServices
    {
        private readonly ILoginRepositorys _loginRepositorys;

        public LoginServices(ILoginRepositorys loginRepositorys)
        {
            this._loginRepositorys = loginRepositorys;
        }
        //登录查询
        public async Task<int> Login(string Account, string Password)
        {
            int Msg = 0;
            try
            {
                if (string.IsNullOrWhiteSpace(Account))
                {
                    throw new Exception("账号不能为空!");
                }
                if (string.IsNullOrWhiteSpace(Password))
                {
                    throw new Exception("密码不能为空!");
                }
                if (await _loginRepositorys.Login(Account,Password)> 0)
                {
                    Msg = 1;
                }
            }
            catch (Exception ex)
            {
                return Msg;
            }
            return Msg;
        }
    }

这里我们只需要做业务处理即可,如码所示,当我们处理业务时只需要调用LoginRepositorys层即可,这样充分展现了高内聚、低耦合的设计,而且后期易于维护,当数据库发生变化时,只需要修改LoginRepositorys层,就不用修改业务层了。

3.4 控制器层(API层)
[Route("api/[controller]/[action]")]
    [ApiController]
    public class HomeController : ControllerBase
    {
        private readonly ILoginServices _loginServices;

        public HomeController(ILoginServices loginServices)
        {
            this._loginServices = loginServices;
        }
        [HttpGet]
        public string Word()
        {
            return "Hello Word!";
        }
        [HttpGet]
        public string Login(string account, string password)
        {
            string Meg = "我是测试!";
            if (account == "admin" && password == "123456")
            {
                Meg = "测试成功了!";
            }
            return Meg;
        }
        [HttpGet]
        public async Task<int> Logins(string Account, string Password)
        {
            //使用MD5加密
            string Passwords = MD5Helper.MD5Encrypt64(Password);
            return (await _loginServices.Login(Account, Passwords));
        }
    }

主要思想:前端—>控制器层(API层)—>Services层—>LoginRepositorys层
目前是写了个比较简单的框架搭建Demo,后续会继续补充,也会继续开发别的框架Demo,学无止境!文章来源地址https://www.toymoban.com/news/detail-479037.html

到了这里,关于.Net Core 6 WebApi 项目搭建(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • asp.net core框架搭建1-搭建webapi,对数据增删改查接口模板(附源码)

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131458922 asp.net core 框架搭建2-搭建webapi ,本文章介绍asp.net core webapi框架搭建,然后开发增删改查和工具接口,将一步步带着大家,实现目标。所有操作过程将展现在本篇文章,下面咋们一起来实现它吧。 asp.ne

    2024年02月13日
    浏览(38)
  • .NET Core WebAPI项目部署iis后Swagger 404问题解决

    之前做了一个WebAPI的项目,我在文章中写到的是Docker方式部署,然后考虑到很多初学者用的是iis,下面讲解下iis如何部署WebAPI项目。 iis ASPNETCoreModuleV2 重点 .NET Core Runtime iis的配置这里就不讲了,主要讲解.NET Core项目部署之后Swagger无法访问问题。 ASPNETCoreModuleV2 安装: https:/

    2024年03月09日
    浏览(34)
  • 基于.NET6搭建WebAPI项目

     点击运行后自动打开浏览器,看到如下信息: 系统启动日志如下: 此数据对用户不友好。 nuget安装  Microsoft.AspNetCore.Mvc.NewtonsoftJson   安装成功:  只需要在Program.cs 文件下添加几行代码 找到 builder.Services.AddControllers()   代码如下:  测试结果如下: 打开Xml文件生成,右键

    2023年04月08日
    浏览(39)
  • .Net Core WebApi

    目录 MiniMalAPi Demo Program.cs Swagger 文档+信息 Program.cs API版本控制 ApiVersion.cs Version1Controller.cs Program.cs 生成注释 解决跨域 .Net 后台请求封装 返回数据压缩 默认压缩 Gzip压缩 缓存 接口缓存 静态文件缓存 最小的api, 请求都写在Program.cs中, 可以做微服务 该例子仅供参考 这里其他版

    2024年02月14日
    浏览(36)
  • ASP.NET Core SingleR Core:WebApi + .net 客户端开发

    我之前稍微研究了一下SignalR Core。用起来还行。简单来说SignalR就是用来解决实时通讯的问题的。 ASP.NET Core SingleR:初次体验和简单项目搭建 SignalR支持三种客户端,C#,Java,JavaScirpt。基本够用了。本身就是微软开发的,肯定支持自己的语言。因为是Websocket的上层封装,所以也要支

    2024年01月20日
    浏览(52)
  • .NET Core WebAPI 基础 文件上传

    昨天分享了一个在WebApi中如何接收参数的文章 传送门,然后有新人小伙伴就问了,那文件上传呢,这个怎么弄,借此我写了一个小demo,分享给大家。 通常来说,上传文件,我们是使用POST,还是老规矩先上代码: 这是需要上传的txt文件。 这里有一个需要注意的地方,就是上

    2024年02月11日
    浏览(24)
  • .NET Core WebAPI中封装Swagger配置

    创建一个Utility/SwaggerExt文件夹,添加一个类 在SwaggerExt类中添加方法,将相关配置添写入 调用封装的方法

    2024年02月20日
    浏览(30)
  • .net 温故知新【14】:Asp.Net Core WebAPI 缓存

    缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快。 从概念上讲,缓存是一种性能优化策略和设计考虑因素。 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性。 在最新的缓存控制规范文件RFC9111中,详细描述了浏览器缓存和

    2024年02月05日
    浏览(43)
  • 如何在 .NET Core WebApi 中处理 MultipartFormDataContent

    最近在对某个后端服务做 .NET Core 升级时,里面使用了多处处理 MultipartFormDataContent 相关内容的代码。这些地方从 .NET Framework 迁移到 .NET Core 之后的代码改动较大,由于本身没有测试覆盖,导致在部署 QA 环境后引发了一些问题。这里做一个技术复盘。 我们在做后端接口开发的

    2023年04月19日
    浏览(33)
  • Asp.net core Webapi 如何执行定时任务?

    在计算机系统中,定时执行一些后台任务是很常见的场景,比如定时发送邮件、备份数据等等。 那么,.NET 技术如何通过编程灵活地实现项目里复杂的自定义任务呢? 如果是 Windows 生态,通常来说,可以有这些方式: 编写一个程序,通过 Windows 内置的任务计划来定时执行。

    2024年02月04日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包