BgrWorker
BgrWorker

Reputation: 679

Reading app.config from .NET Standard 2.0 library

I'm creating a .NET Standard 2.0 library to be consumed from a .NET Framework 4.6.1 application.
This library needs EF Core, but I can't figure out how to read the app.config.

In a .NET Framework library I would initialize my DBContext like this:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString);
}

But I can't do it since ConfigurationManager is nowhere to be found in .NET Standard 2.0.
How can I read the configuration file from a .NET Standard 2.0 library?

Upvotes: 7

Views: 6262

Answers (1)

Kevin Smith
Kevin Smith

Reputation: 14466

Create an interface and use dependency inversion for the connection string, so your code will look something like

public interface IConnectionSettings
{
    string MyDatabaseConnectionString { get; }
}

class MyClass
{
    private readonly IConnectionSettings _connectionSettings;

    public MyClass(IConnectionSettings connectionSettings)
    {
        _connectionSettings = connectionSettings;
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(_connectionSettings.MyDatabaseConnectionString);
    }
}

Then the consuming app running in .NET Framework can then create their own settings implementation and pass it in

public class ConfigurationManagerConnectionSettings : IConnectionSettings
{
    public string MyDatabaseConnectionString { get; }
        = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
}

var s = new ConfigurationManagerConnectionSettings();
var myClass = new MyClass(s);

And all the hipster kids can use environment variables:

public class EnvironmentVariableConnectionSettings : IConnectionSettings
{
    public string MyDatabaseConnectionString { get; }
        = Environment.GetEnvironmentVariable("MyDatabaseConnectionString");
}

Win for everyone

Upvotes: 7

Related Questions