在.NET Core应用程序中获取连接字符串

8
我正在尝试从appsettings.json文件中动态获取连接字符串。我发现可以通过startup类的Configuration属性来实现。我已将Configuration字段标记为静态字段,并在整个应用程序中访问它。
我想知道是否有更好的方法从.NET Core应用程序中获取连接字符串值。

你可以通过ASP.NET Core依赖注入服务注入Configuration对象 - [示例在这里](https://radu-matei.github.io/blog/aspnet-core-configuration-greeting/#making-use-of-asp-net-core-dependency-injection) - radu-matei
1
如何将配置对象注入到仅具有无参数构造函数的类中?或者如何将数据库上下文注入到仅具有无参数构造函数的类中? - A. Gladkiy
至少在ASP.NET Core中,建议采用选项模式来考虑SoC和ISP原则:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration#using-options-and-configuration-objects 这些原则也适用于.NET Core解决方案。 - Niklas Peter
3个回答

8
你可以查看我的ASP.NET Core配置博客文章,链接在这里
在其中,我还介绍了配置选项的依赖注入。
引用:
有几种方法可以获取设置。一种方法是在Startup.cs中使用Configuration对象。
您可以通过在Startup.cs的ConfigureServices中执行以下操作,在应用程序全局范围内使配置可用于依赖注入:
```services.AddSingleton(Configuration);```

我该如何将Configuration对象注入到只有无参构造函数的类中?或者我该如何将db context注入到只有无参构造函数的类中? - A. Gladkiy
谢谢你的提示,我也是ASP.NET Core应用程序的初学者,不知道我们可以做这样的事情。太棒了! - Eastrall
2
@A.Gladkiy ASP.NET Core DI 使用默认的 IoC 容器仅支持构造函数注入。您无法以其他方式将服务注入到类中。您应该查看是否有其他人之前已经问过这个问题,如果没有,就提出一个新的问题。 - juunas
2
希望回答能够展示如何操作而不是引导到其他网站。只需要一个简单的例子。 - Aran Mulholland

0

您可以在Startup.cs文件中声明一个线程安全的Singleton,用于存储IConfiguration变量。

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文件,所以我尝试添加一个,但它没有调用构造函数。你是如何让它工作的? - Dan Chase

0
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");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接