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

        }
    }
}
相关推荐
xiyusec8 分钟前
HTML基础
前端·html
好开心3335 分钟前
javaScript交互案例2
开发语言·前端·javascript·html·ecmascript·交互
xChive38 分钟前
优化表单交互:在 el-select 组件中嵌入表格显示选项
前端·vue.js·交互·element-plus
tian-ming38 分钟前
(十八)JavaWeb后端开发案例——会话/yml/过滤器/拦截器
java·开发语言·前端
_jacobfu1 小时前
mac2024 安装node和vue
前端·javascript·vue.js
Ztiddler1 小时前
【npm设置代理-解决npm网络连接error network失败问题】
前端·后端·npm·node.js·vue
三天不学习1 小时前
前端工程化-node/npm/babel/polyfill/webpack 一文速通
前端·webpack·npm
羽羽Ci Ci1 小时前
axios vue.js
前端·javascript·vue.js
huaqianzkh1 小时前
学习C#中的Parallel类
windows·microsoft·c#
岳哥i1 小时前
前端项目接入单元测试手册
前端·单元测试