【问题标题】:Get connection string in .NET Core application在 .NET Core 应用程序中获取连接字符串
【发布时间】:2017-03-06 01:15:22
【问题描述】:

我正在尝试从 appsettings.json 文件中动态获取 连接字符串。我看到我可以通过 startup 类的 Configuration 属性来做到这一点。我已将配置字段标记为静态字段并在应用程序中访问它。

我想知道是否有一种更好的 方法可以从 .NET Core 应用程序中获取连接字符串值。

【问题讨论】:

  • 可以通过ASP.NET Core中的依赖注入服务注入Configuration对象-Example here
  • 如何将配置对象注入到只有无参数构造函数的类中?甚至如何将数据库上下文注入到只有无参数构造函数的类中?
  • 至少在 ASP.NET 核心中,推荐的方法是使用考虑 SoC 和 ISP 原则的选项模式:docs.microsoft.com/en-us/aspnet/core/fundamentals/… .NET Core 解决方案也应该考虑这些原则。

标签: c# asp.net asp.net-core .net-core


【解决方案1】:

您可以查看我关于 ASP.NET Core 配置here 的博客文章。

在其中我还经历了配置选项的依赖注入。

引用:

有几种方法可以获取设置。一种方法是使用 Startup.cs 中的配置对象。

您可以通过以下方式使配置在您的应用中全局可用 通过在 Startup.cs 的 ConfigureServices 中执行此操作进行依赖注入:

services.AddSingleton(配置);

【讨论】:

  • 如何将配置对象注入到只有无参数构造函数的类中?甚至如何将数据库上下文注入到只有无参数构造函数的类中?
  • 感谢您的提示,我也是 ASP.NET Core 应用程序的初学者,不知道我们可以做这样的事情。太好了!
  • @A.Gladkiy 具有默认 IoC 容器的 ASP.NET Core DI 仅使用构造函数注入。您不能以不同的方式将服务注入到一个类中。你应该看看其他人以前是否问过这个问题,如果没有,就问一个关于这个的新问题。
  • 希望答案能告诉你如何去做,而不是指向其他网站。只是一个简单的例子。
【解决方案2】:

您可以对在Startup.cs 文件中声明的IConfiguration 变量执行线程安全的Singleton

private static object syncRoot = new object();
private static IConfiguration configuration;
public static IConfiguration Configuration
{
    get
    {
        lock (syncRoot)
            return configuration;
    }
}

public Startup()
{
    configuration = new ConfigurationBuilder().Build(); // add more fields
}

【讨论】:

  • 我在控制台应用程序中尝试过,但没有 Startup.cs,所以我尝试添加一个,但它没有调用构造函数。你是如何让它发挥作用的?
【解决方案3】:
private readonly IHostingEnvironment _hostEnvironment;
    public IConfiguration Configuration;
    public IActionResult Index()
    {
        return View();
    }

    public ViewerController(IHostingEnvironment hostEnvironment, IConfiguration config)
    {
        _hostEnvironment = hostEnvironment;
        Configuration = config;
    }

在类中你想要连接字符串

 var connectionString = Configuration.GetConnectionString("SQLCashConnection");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-02
    相关资源
    最近更新 更多