wake-up-neo.com

Speichern / Abrufen von ConnectionString aus appSettings.json in der ASP.net Core 2 MVC-App

Ich suche nach der bewährten Methode zum Speichern einer Verbindungszeichenfolge in appsettings.json in einer .net Core 2 MVC-App (wie Sie es im Web tun) .config in MVC 5).

Ich möchte Dapper nicht EF verwenden (ich habe viele EF-Beispiele gefunden).

Etwas wie das:

{
  "ConnectionStrings": {
    "myDatabase": "Server=.;Database=myDatabase;Trusted_Connection=true;"
  },

  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

Sicher gibt es viele Beispiele online? Nichts was ich finden kann ist für .net Core 2.0.

Einige Dinge haben sich zwischen 1 und 2 geändert, und ich möchte sicherstellen, dass ich die Best Practices von Version 2 verwende.

Ich habe dies gefunden - aber es scheint .net Core 1 zu sein: Visual Studio 2017 - MVC Core - Teil 05 - Verbindungszeichenfolge von appsettings.json

Dies verwendet Schlüsselwertpaar-Appsettings - nicht die Verbindungszeichenfolgen: AppSettings in ASP.NET Core 2.0 lesen

Auch hier ist unklar, ob dies .net Core 1 oder 2 ist: Net Core Connection String Dapper Visual Studio 2017

8
niico

Definieren Sie Ihre Verbindungszeichenfolge in appsettings.json

{
    "connectionStrings": {
        "appDbConnection: : "..."
    }
}

Lesen Sie den Wert beim Start

Wenn Sie der Konvention folgen und Ihre Verbindungszeichenfolge (n) unter connectionStrings definieren, können Sie die Erweiterungsmethode GetConnectionString() verwenden, um ihren Wert zu lesen.

public class Startup
{
    public IConfiguration Configuration { get; private set; }

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        // Since you said you're using Dapper, I guess you might want to
        // inject IDbConnection?
        services.AddTransient<IDbConnection>((sp) => 
            new SqlConnection(this.Configuration.GetConnectionString("appDbConnection"))
        );

        // ...
    }
}

IDbConnection im Repository verwenden?

public interface ISpecificationRepository
{
    Specification GetById(int specificationId);
}

public SpecificationRepository : ISpecificationRepository
{
    private readonly IDbConnection _dbConnection;

    public SpecificationRepository(IDbConnection dbConnection)
    {
        _dbConnection = dbConnection;
    }

    public Specification GetById(int specificationId)
    {
        const string sql = @"SELECT * FROM [YOUR_TABLE]
                             WHERE Id = @specId;";

        return _dbConnection
            .QuerySingleOrDefault<Specification>(sql,
                new { specId = specificationId });
    }
}

Benötigen Sie nur die Verbindungszeichenfolge in einem POCO?

Sie können das Optionsmuster verwenden.

  1. Definieren Sie eine Klasse, die genau mit der Objektstruktur JSON in appsettings.json übereinstimmt

    public class ConnectionStringConfig
    {
        public string AppDbConnection { get; set; }
    }
    
  2. Registrieren Sie diese Konfiguration beim Start

    public void ConfigureServices(IServiceCollection services)
    {
       // ...
    
       services.Configure<ConnectionStringConfig>(
           this.Configuration.GetSection("connectionStrings")
       );
    
       // ...
    }
    
  3. Erhalten Sie den Accessor in Ihrem POCO

    public class YourPoco
    {
        private readonly ConnectionStringConfig _connectionStringConfig;
    
        public YourPoco(IOptions<ConnectionStringConfig> configAccessor)
        {
            _connectionStringConfig = configAccessor.Value;
    
            // Your connection string value is here:
            // _connectionStringConfig.AppDbConnection;
        }
    }
    

Anmerkungen:

  1. Siehe meine Beispielcodes zum Lesen von Werten aus appsettings.json auf Core 1.x und 2.0.
  2. Siehe wie ich eingerichtet habe wenn Sie mehr als 1 Verbindungszeichenfolge haben.
11
David Liang

Einfach wie unten gezeigt in appsettings.json einfügen.

"ConnectionStrings": {
    "DefaultConnection": "Data Source=;Initial Catalog=;Persist Security Info=True;User ID=; Password=;"
}

In Startup.cs rufen Sie es wie folgt auf:

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

        builder.AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }
}

Verwenden Sie die Abhängigkeitsinjektion, um die Konfiguration in die Steuerung zu injizieren, wie unten erwähnt:

public class MyController : Controller
{
    private readonly IConfiguration _configuration;
    private string connectionString;

    public MyController(IConfiguration configuration) 
    {
        _configuration = configuration;

        connectionString = _configuration.GetConnectionString("DefaultConnection");
    }
}
1
Riddhi