无需依赖项注入的.NET配置API

时间:2018-08-22 08:43:22

标签: c# .net-core

我有一个.NET Core控制台应用程序,它可以像这样加载我的配置文件:

var configBuilder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json");

Configuration = configBuilder.Build();

我所见过的大多数示例都只是停在那里,所以我假设它们随后将Configuration传递给整个应用程序吗? (或向IOC注入)

过去,我只是从任何地方的任何类中执行ConfigurationManager.AppSettings [“ key”],但我想使用新的appsettings.json方法。现在不建议对配置进行简单的“全局”访问吗?

我认为IOC不适合我的情况,因为我的Main()方法立即使用'new'创建了许多类实例。

3 个答案:

答案 0 :(得分:2)

可接受的做法是将配置作为IConfiguration注入到您的服务中。

如果您不介意用脚踩死自己,可以手动创建一个全局静态类,并在开始时初始化已构建的配置,并在各处使用它,但是请注意,这基本上是OOP的异端视角。

请注意:如果您的Main方法使用new创建了很多东西,也许不应该吗?您可以使用IoC容器并调用container.Resolve<IService>()而不是new Service(/*...*/)。如果您考虑了一些重构,则可以正确设置DI(如果您打算对事物进行单元测试,那么这是值得的(注意:您应该对事物进行单元测试)。)

答案 1 :(得分:0)

这将对您有所帮助。它为我工作。

public static string GetConnectionString(string connectionStringName)
    {
        string basePath = "";
        try
        {
            var env = PlatformServices.Default.Application;
            basePath = Directory.GetCurrentDirectory();
            var builder = new ConfigurationBuilder()

            .SetBasePath(basePath)
            .AddJsonFile("appsettings.json")
            .AddEnvironmentVariables();
            Configuration = builder.Build();
            return Configuration.GetConnectionString(connectionStringName);
        }
        catch (Exception ex)
        {

        }
    }

答案 2 :(得分:0)

这将对您有所帮助

public static string GetConnectionString(string connectionStringName)
{
    string basePath = "";
    try
    {
        var env = PlatformServices.Default.Application;
        basePath = Directory.GetCurrentDirectory();
        var builder = new ConfigurationBuilder()
            .SetBasePath(basePath)
            .AddJsonFile("appsettings.json")
            .AddEnvironmentVariables();

        Configuration = builder.Build();
        return Configuration.GetConnectionString(connectionStringName);
    }
    catch (Exception ex)
    {

    }
}