私はベストプラクティスを探しています。ネットでの接続設定文字列を.net Core 2 MVCアプリで保存しますMVCの.config 5)。
EFではなくDapperを使用したい(多くのEFの例を見つけた)。
このようなもの:
{
"ConnectionStrings": {
"myDatabase": "Server=.;Database=myDatabase;Trusted_Connection=true;"
},
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Warning"
}
}
}
確かに多くの例がオンラインにありますか? .net core 2.0向けのものはありません。
1から2の間でいくつかの変更があり、バージョン2のベストプラクティスを使用していることを確認したいと思います。
私はこれを見つけました-しかし、それは.netコア1のようです: Visual Studio 2017-MVCコア-パート05-appsettings.jsonからの接続文字列
これは、接続文字列ではなく、キーと値のペアのappsettingsを使用します。 ASP.NET Core 2.0のAppSettingsを読み取る
繰り返しますが、これが.net Core 1か2かは不明です Net Core Connection String Dapper visual studio 2017
appsettings.json
_で接続文字列を定義します_{
"connectionStrings": {
"appDbConnection: : "..."
}
}
_
規則に従って、connectionStrings
の下に接続文字列を定義する場合、拡張メソッドGetConnectionString()
を使用してその値を読み取ることができます。
_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 });
}
}
_
Options Pattern を使用できます。
Appsettings.jsonのJSON
オブジェクト構造と完全に一致するクラスを定義します
_public class ConnectionStringConfig
{
public string AppDbConnection { get; set; }
}
_
起動時にその構成を登録する
_public void ConfigureServices(IServiceCollection services)
{
// ...
services.Configure<ConnectionStringConfig>(
this.Configuration.GetSection("connectionStrings")
);
// ...
}
_
POCOでアクセサーを受け取ります
_public class YourPoco
{
private readonly ConnectionStringConfig _connectionStringConfig;
public YourPoco(IOptions<ConnectionStringConfig> configAccessor)
{
_connectionStringConfig = configAccessor.Value;
// Your connection string value is here:
// _connectionStringConfig.AppDbConnection;
}
}
_
ノート:
以下に示すようにappsettings.jsonに配置します。
"ConnectionStrings": {
"DefaultConnection": "Data Source=;Initial Catalog=;Persist Security Info=True;User ID=; Password=;"
}
Startup.csで、次のようにフェッチします。
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; }
}
依存関係の注入を使用して、以下で説明するようにコントローラーに構成を注入します。
public class MyController : Controller
{
private readonly IConfiguration _configuration;
private string connectionString;
public MyController(IConfiguration configuration)
{
_configuration = configuration;
connectionString = _configuration.GetConnectionString("DefaultConnection");
}
}