从vNext中的appsetting.json读取启动外的连接字符串

che*_*xis 17 c# asp.net-core

我有一个项目类(Nuget Package).我需要在没有构造函数的静态类中读取我的连接字符串到MongoDB.

静态类方法:

        /// <summary>
        /// The default key MongoRepository will look for in the appsettings.json 
        /// </summary>
        private const string DefaultConnectionstringName = "Data:MongoDB:MongoServerSettings";

        /// <summary>
        /// Retrieves the default connectionstring from appsettings.json
        /// </summary>
        /// <returns>Returns the default connectionstring from the App.config or Web.config file.</returns>
        public static string GetDefaultConnectionString()
        {
            var config = new Configuration();
            return config.Get<string>(DefaultConnectionstringName);
        }
Run Code Online (Sandbox Code Playgroud)

我总是null ...如何在不使用DI的情况下获取Startup.cs之外的值?

有可能的?

在我的旧代码中,我可以做类似的事情:

/// <summary>
    /// Retrieves the default connectionstring from the App.config or Web.config file.
    /// </summary>
    /// <returns>Returns the default connectionstring from the App.config or Web.config file.</returns>
    public static string GetDefaultConnectionString()
    {
        return ConfigurationManager.ConnectionStrings[DefaultConnectionstringName].ConnectionString;
    }
Run Code Online (Sandbox Code Playgroud)

谢谢!!

Sai*_*war 39

1. appsetting.json中的.ConnectionString

在此输入图像描述

  1. 在Startup.cs类中创建Singleton Configuration of Configuration

在此输入图像描述

  1. 使用依赖注入从配置实例读取值[构造函数注入]

在此输入图像描述

  1. 最后输出

在此输入图像描述

  • 这应该是公认的答案.很棒的解释. (3认同)
  • 好的。但是 ProductConcrete 是如何实例化的呢? (3认同)

arm*_*oon 22

在启动内部,您应该将连接字符串保存到静态属性上 Startup

public class Startup
{
    public static string ConnectionString { get; private set; }

    public Startup(IHostingEnvironment env)
    {
        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json")
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddUserSecrets();

        if (env.IsDevelopment())
        {
            // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
            builder.AddUserSecrets();
        }

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
        ConnectionString = Configuration.Get<string>("Data:MongoDB:MongoServerSettings");
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后你应该能够从任何地方访问它:

public static string GetDefaultConnectionString()
{
    return Startup.ConnectionString;
}
Run Code Online (Sandbox Code Playgroud)

  • 它可以工作但不在类库中,它可以在我的HomeController中工作.我没有谈到这个规范...我会标记为有效:) (2认同)

小智 5

这样的事情应该起作用:

   public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
    {
        var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath).AddJsonFile("config.json");
        Configuration = builder.Build();
        var connStr = Configuration.Get("connString");
    }
Run Code Online (Sandbox Code Playgroud)

文件:http//docs.asp.net/en/latest/fundamentals/configuration.html