如何在另一个项目的上下文中读取 appsettings.json ? ASP.NET核心

2023-12-29

我需要使用相同的ConnectionString在两个地方。在我的网络项目中Insig.Api其中包含ConnectionString from appsettings.json并在另一个项目类库中Insing.Infrastructure我的数据库上下文在哪里。

Insig.Api-Startup.cs

public class Startup
    {
        public IConfiguration Configuration { get; }

        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
            Configuration = builder.Build();
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();

            services.AddSingleton(Configuration);
            services.AddDbContext<InsigContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
        }
    }

Insig.基础设施-InsigContext.cs

public class InsigContext : DbContext, IDesignTimeDbContextFactory<InsigContext>
{
    public InsigContext() { }

    public InsigContext(DbContextOptions<InsigContext> options) : base(options) { }

    public DbSet<Sample> Samples { get; set; }

    public InsigContext CreateDbContext(string[] args)
    {    
        var builder = new DbContextOptionsBuilder<InsigContext>();    

        builder.UseSqlServer("Data Source=.\\SQLEXPRESS;Initial Catalog=InsigDB;Integrated Security=True;MultipleActiveResultSets=True");
   // Here I would like to use ConnectionString instead of raw string.    

        return new InsigContext(builder.Options);
    }
}

如你看到的ConnectionString由于迁移(来自代码优先方法),上下文中也需要它。


编辑-下面的代码不起作用。当我试图Add-Migration Init然后我收到一个错误:Value cannot be null. Parameter name: connectionString

public class InsigContext : DbContext
    {
        private readonly string _connectionString;    

        public InsigContext(DbContextOptions<InsigContext> options, IConfiguration configuration) : base(options)
        {
            _connectionString = configuration.GetSection("ConnectionStrings:DefaultConnection").Value;
        }

        public InsigContext() { }

        public DbSet<Sample> Samples { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlServer(_connectionString);
            }
        }
    }

你可以注射IConfiguration给你的InsigContext构造函数并使用它来获取连接字符串

private readonly string connectionString;
public InsigContext(DbContextOptions<InsigContext> options,IConfiguration configuration)
                                                                          : base(options)
{ 
   this.connectionString = configuration.GetSection("ConnectionStrings:DefaultConnection")
                                     .Value;
}
// you can use this.connectionString now

IConfiguration定义于Microsoft.Extensions.Configuration命名空间。因此,您可能想在类库中添加对此的引用。

如果您想访问IConfiguration对象在另一个方法中,创建一个局部变量并在构造函数中设置它

private readonly IConfiguration configuration;
public InsigContext(IConfiguration configuration)
{
    this.configuration = configuration;
}

public void CreateDbContext(string[] args)
{
   // you can use this.configuration here as needed or get conn string
}

不需要多个构造函数。在您要注入所需依赖项的位置保留一个构造函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在另一个项目的上下文中读取 appsettings.json ? ASP.NET核心 的相关文章

随机推荐

  • VBScript 中的 XPath 计数

    我尝试使用 XPath 计数函数获取 XML 文件中特定节点的数量 但是 这不断返回错误 msxml3 dll 类型的异常 表达式不返回 DOM 节点 如何使用 VBScript 和 MSXML DOM 从 XPath 计数获取返回值 Di
  • 以数组为原型的 Javascript 对象成员由所有类实例共享

    以前有人注意到这种行为吗 这真的让我很失望 我本来期望原型数组对于每个类实例都是私有的 而不是在所有类实例之间共享 有人可以验证这是正确的行为 并且也许可以更详细地解释这种行为吗 请注意注释的代码以及它如何影响脚本的行为
  • 有没有好的交互式 3D 图形库?

    我正在寻找一个库 它将以 3D 方式布局和显示图形 即网络图 而不是图表 并具有一些交互性 例如选择和拖动节点 旋转显示等 我想在网页中执行此操作 因此 Javascript或 Flash 更好 我也会考虑 Java 自我审视后 我意识到选
  • Action<>多参数语法说明

    有时我无法理解最简单的事情 我确信它就在我的脸上 只是我看不到它 我尝试为这个简单类中的方法创建委托 public static class BalloonTip public static BalloonType BalType get
  • Linux下Git克隆fsync输入/输出错误

    我正在尝试克隆张量流 模型存储库 我通过 ssh 连接到远程计算机 我尝试了很多解决问题的建议 但没有一个对我有用 git clone recursive https github com tensorflow models git Clo
  • Firebase 云消息传递是否需要服务器?

    我目前正在开发一个 Android 应用程序 我想包含 Firebase Cloud Messaging 我计划让 Raspberry Pi 每 5 分钟左右检查一次网站 并在发生变化时发送推送通知 在官方文档中 他们说我需要一个 应用程序
  • 检查 Pandas 数据框是否存在异常值[重复]

    这个问题在这里已经有答案了 传感器图 https i stack imgur com OahnS png 我对包含 8 个电极的传感器进行了实验 上图是电极输出与时间的关系图 正如您在图中看到的 8 个电极之一显然是异常值 可能是由于某些电
  • -ObjC 链接器标志有什么作用?

    我有一个可以使用和不使用链接器标志的应用程序 但是 如果没有链接器标志 向视图添加数据时我会得到非常不同的行为 该标志使链接器加载库中定义 Objective C 类或类别的每个目标文件 虽然此选项通常会导致更大的可执行文件 由于将额外的目
  • 迭代加深 A Star (IDA*) 在 Java 中解决 n-puzzle(滑动拼图)

    我已经实现了一个能够解决这个问题的程序n 拼图问题 http en wikipedia org wiki Fifteen puzzle与 A 由于状态空间太大 我无法预编译它 我必须在运行时计算可能的状态 通过这种方式 A 对于 3 谜题来
  • 错误:我的所有函数都出现“函数的隐式声明...”

    这是代码 main short sMax SHRT MAX int iMax INT MAX long lMax LONG MAX Printing min and max values for types short int and lo
  • 如何在 py.test 中显示警告

    我刚刚跑了py test http pytest org在我的代码上并得到以下输出 6 passed 2 pytest warnings in 40 79 seconds 但是 我看不到什么py test想警告我一下 如何打开控制台的警告输
  • 带蓝牙麦克风的 Android 语音识别器

    我一直在编写一个与蓝牙耳机 耳机配合使用的聊天应用程序 到目前为止 我已经能够通过蓝牙耳机中的麦克风录制音频文件 我已经能够使用 Android 设备的内置麦克风 使用 RecogniserIntent 等实现语音转文本功能 但我找不到让
  • 从 JSON 文件推断字符串文字类型

    我正在读取一个大的 JSON 文件 TypeScript 足够智能推断类型所有属性中除了一个 一个简化的例子 type Animal bear cat dog const data name Max age 3 animal dog 100
  • Control.BeginInvoke 的 MethodInvoker 与 Action

    哪个更正确 为什么 Control BeginInvoke new Action DoSomething null private void DoSomething MessageBox Show What a great post or
  • 一个用户的访问控制允许来源错误

    我有一个 WCF 服务与另一个 Web 应用程序托管在同一服务器上 但端口不同 Web 应用程序使用 jQuery 在 WCF 服务上执行 get post 请求 在配置 WCF 服务以允许跨源请求后 它可以正常工作并符合预期 一个问题是有
  • 如何取消 Alamofire 共享管理器中的所有请求

    如何取消Alamofire共享管理器中的所有请求 这是我的功能 class func cancelAllRequests Alamofire Manager sharedInstance session getTasksWithComple
  • 从 java 调用 clojure

    大多数 从 java 调用 clojure 的热门 google 搜索结果都已过时 建议使用clojure lang RT编译源代码 假设您已经从 Clojure 项目构建了一个 jar 并将其包含在类路径中 您能否帮助清楚地解释如何从 J
  • 如何在 Android 设备上将 http/2 与 Okhttp 一起使用?

    我正在测试一个支持 HTTP 2 的网站 像这样 https www h2check org google it 我尝试使用 okhttp 发送请求 OkHttpClient okHttpClient new OkHttpClient Re
  • 无法在 Xcode 中打印到控制台

    我是 Xcode macOS 开发等方面的新手 所以也许只是因为我是新手 但我无法尽全力制作一个简单的打印输出来控制台工作 我为我的问题创建了一个最小的非工作示例 import SwiftUI struct Test View State
  • 如何在另一个项目的上下文中读取 appsettings.json ? ASP.NET核心

    我需要使用相同的ConnectionString在两个地方 在我的网络项目中Insig Api其中包含ConnectionString from appsettings json并在另一个项目类库中Insing Infrastructure