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获取字符串

        }
    }
}
相关推荐
美酒没故事°5 分钟前
npm源管理器:nrm
前端·npm·npm源
用户22152044278005 分钟前
vue3组件间的通讯方式
前端·vue.js
三十_A23 分钟前
【实录】使用 patch-package 修复第三方 npm 包中的 Bug
前端·npm·bug
下位子31 分钟前
『AI 编程』用 Claude Code 从零到一开发全栈减脂追踪应用
前端·ai编程·claude
tyro曹仓舒31 分钟前
Vue单文件组件到底需不需要写name
前端·vue.js
用户479492835691532 分钟前
面试官:讲讲2FA 双因素认证原理
前端·后端·安全
乐影32 分钟前
TS 模板字符串类型:从基础到进阶的类型编程魔法
前端·typescript
龙在天33 分钟前
CSS 属性值的计算与过程
前端
云鹤_34 分钟前
【Amis源码阅读】组件注册方法远比预想的多!
前端·低代码
xinfei36 分钟前
ES6 新特性 从 ECMAScript 2015(ES6)到 ECMAScript 2025
前端