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
appsettings.json
{
"connectionStrings": {
"appDbConnection: : "..."
}
}
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"))
);
// ...
}
}
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 });
}
}
Sie können das Optionsmuster verwenden.
Definieren Sie eine Klasse, die genau mit der Objektstruktur JSON
in appsettings.json übereinstimmt
public class ConnectionStringConfig
{
public string AppDbConnection { get; set; }
}
Registrieren Sie diese Konfiguration beim Start
public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<ConnectionStringConfig>(
this.Configuration.GetSection("connectionStrings")
);
// ...
}
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:
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");
}
}