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

        }
    }
}
相关推荐
孤水寒月3 小时前
基于HTML的悬窗可拖动记事本
前端·css·html
祝余呀3 小时前
html初学者第一天
前端·html
芳草萋萋鹦鹉洲哦4 小时前
【vue3+tauri+rust】如何实现下载文件mac+windows
windows·macos·rust
李洋-蛟龙腾飞公司4 小时前
HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
windows
耶啵奶膘6 小时前
uniapp+firstUI——上传视频组件fui-upload-video
前端·javascript·uni-app
视频砖家6 小时前
移动端Html5播放器按钮变小的问题解决方法
前端·javascript·viewport功能
lyj1689976 小时前
vue-i18n+vscode+vue 多语言使用
前端·vue.js·vscode
小白变怪兽8 小时前
一、react18+项目初始化(vite)
前端·react.js
ai小鬼头8 小时前
AIStarter如何快速部署Stable Diffusion?**新手也能轻松上手的AI绘图
前端·后端·github
葬歌倾城8 小时前
JSON的缩进格式方式和紧凑格式方式
c#·json