it-swarm.dev

ASP.net Core 2 MVC 앱의 appSettings.json에서 ConnectionString 저장 / 검색

웹에서와 같이 appsettings.json에 .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

8
niico

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"))
        );

        // ...
    }
}

저장소 내에서 IDbConnection을 사용 하시겠습니까?

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 });
    }
}

POCO에 연결 문자열이 필요합니까?

옵션 패턴 을 사용할 수 있습니다.

  1. Appsettings.json의 JSON 객체 구조와 정확히 일치하는 클래스를 정의하십시오.

    public class ConnectionStringConfig
    {
        public string AppDbConnection { get; set; }
    }
    
  2. 시작시 해당 구성 등록

    public void ConfigureServices(IServiceCollection services)
    {
       // ...
    
       services.Configure<ConnectionStringConfig>(
           this.Configuration.GetSection("connectionStrings")
       );
    
       // ...
    }
    
  3. POCO에서 접근자를받습니다

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

노트:

  1. Core 1.x 및 2.0에서 appsettings.json의 값을 읽는 방법에 대해서는 my sample codes 를 참조하십시오.
  2. 연결 문자열이 둘 이상인 경우 설정 방법 을 참조하십시오.
11
David Liang

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");
    }
}
1
Riddhi