Web开发:ABP框架6——appsetting.json的读取以及实例的注入

目录

一、模块配置服务

二、配置服务的编写(配置ORM)

[三、高层代码的运用(ORM实例查询 & 获取字符串)](#三、高层代码的运用(ORM实例查询 & 获取字符串))

一、模块配置服务

BookStoreHttpApiHostModule

二、配置服务的编写(配置ORM)

(以freesql为例子)

cs 复制代码
public static class MultiDBSetup
{
    public static void AddMultiDB(this IServiceCollection services)
    {
        var configuration = services.GetConfiguration();
        var conn = configuration.GetSection("ConnectionStrings").GetChildren().FirstOrDefault().Value;//获取连接字符串
        IFreeSql fsql = new FreeSql.FreeSqlBuilder()
                            .UseConnectionString(FreeSql.DataType.SqlServer, conn)
                            .UseMonitorCommand(cmd => Console.WriteLine($"Sql:{cmd.CommandText}"))
                            .UseAutoSyncStructure(false) //取消自动同步实体结构到数据库,只有CRUD时才会生成表
                            .Build();

        services.AddSingleton<IFreeSql>(fsql);//将这个实例注册为单例服务,以便其他服务可以通过依赖注入获取 IFreeSql 的实例
    }
}

连接字符串格式:

javascript 复制代码
{
  "App": {
    "CorsOrigins": "https://*.BookStore.com"
  },
  "ConnectionStrings": {
    "Default": "Server=localhost; Database=TestABP;Trusted_Connection=True;TrustServerCertificate=true"
  },
  "Redis": {
    "Configuration": "127.0.0.1"
  }
}

关键代码:

cs 复制代码
var conn = configuration.GetSection("ConnectionStrings").GetChildren().FirstOrDefault()?.Value;//获取连接字符串

三、高层代码的运用(ORM实例查询 & 获取字符串)

cs 复制代码
namespace Acme.BookStore.Books
{
    [Route("api/freesql")]
    public class BookSearchByFreesql : ApplicationService
    {
        private readonly IFreeSql _fsql;
        private readonly IConfiguration _configuration;
        public BookSearchByFreesql(IFreeSql fsql,IConfiguration configuration)
        {
            _fsql = fsql;
            _configuration = configuration;
        }

        /// <summary>
        /// 获取书本(freesql)
        /// </summary>
        /// <returns></returns>
        [Route("freesqlgetbook")]
        [HttpGet]
        public async Task<List<AppBooks>> GetListAsync()
        {
            try
            {
                var books = await _fsql.Select<AppBooks>().ToListAsync();//通过注入的IFreeSql实例进行查询
                return books;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.ToString());
            }

        }

        /// <summary>
        /// 获取连接字符串(appsetting.json)
        /// </summary>
        /// <returns></returns>
        [Route("freesqlgetconn")]
        [HttpGet]
        public async Task<string> GetConn()
        {
            return _configuration.GetSection("ConnectionStrings").GetChildren().FirstOrDefault()?.Value;//通过注入的IConfiguration获取字符串

        }
    }
}
相关推荐
小北方城市网6 分钟前
第 5 课:Vue 3 HTTP 请求与 UI 库实战 —— 从本地数据到前后端交互应用
大数据·前端·人工智能·ai·自然语言处理
踢球的打工仔7 分钟前
ajax的基本使用(上传文件)
前端·javascript·ajax
樊小肆8 分钟前
ollmam+langchain.js实现本地大模型简单记忆对话-内存版
前端·langchain·aigc
may_一一10 分钟前
appium安装(windows)
windows·appium
徐小夕11 分钟前
pxcharts 多维表格开源!一款专为开发者和数据分析师打造的轻量化智能表格
前端·架构·github
电商API&Tina13 分钟前
跨境电商速卖通(AliExpress)数据采集与 API 接口接入全方案
大数据·开发语言·前端·数据库·人工智能·python
Mintopia26 分钟前
🏗️ B端架构中的用户归因与埋点最佳实践
前端·react.js·架构
Filotimo_26 分钟前
在java开发中:JSON序列化和JSON反序列化
java·microsoft·json
码界奇点27 分钟前
基于Gin+Vue的前后端分离权限管理系统设计与实现
前端·vue.js·车载系统·毕业设计·gin·源代码管理
LYFlied38 分钟前
前端跨端技术全景解析:从本质到未来
前端·职场和发展·跨端