EF없이 appsettings.json에서 여러 연결 문자열 가져 오기

asp.net-core asp.net-core-mvc asp.net-mvc dapper

문제

.Net Core RC2를 사용하여 현재 MVC .Net 앱을 마이그레이션하기 만하면됩니다. appsettings.json을 사용하여 구성을 처리하는 방식으로 인해 여러 연결 문자열이있는 경우 EF를 사용하여 connectionstring을 검색해야하거나 각 연결 문자열에 대해 별도의 클래스를 만들어야합니다. 내가보기에는 EF (Dapper를 사용할 것이므로 나에게 이해가되지 않는다) 또는 예제에서는 config 섹션의 이름을 가진 클래스를 빌드한다. 더 나은 해결책이 없습니까?

    "Data": {
        "Server1": {
          "ConnectionString": "data source={server1};initial catalog=master;integrated security=True;"
        },
        "Server2": {
          "ConnectionString": "data source={server2};initial catalog=master;integrated security=True;"
        }
    }

왜 각 클래스의 유일한 속성이 connectionstring이라면 "Server1"과 "Server2"라는 두 개의 클래스를 만들겠습니까?

인기 답변

RC2에서 작동하는 Adem의 응답에 대해 제가 수정 한 몇 가지 수정 사항이 있습니다. 따라서 더 잘 게시 할 수 있다고 생각했습니다.

appsettings.json을 구성하고 Adem 's와 같은 클래스를 만들었습니다.

{
    "ConnectionStrings": {
      "DefaultConnectionString": "Default",
      "CustomConnectionString": "Custom"
    }
}

public class ConnectionStrings
{
    public string DefaultConnectionString { get; set; }

    public string CustomConnectionString { get; set; }
}

대부분의 Adem의 코드는 RC2의 VS 상자에서 나온다. 그래서 아래 줄을 ConfigureServices 메소드에 추가했다.

services.Configure<Models.ConnectionStrings>(Configuration.GetSection("ConnectionStrings"));

주된 결점은 연결 문자열을 컨트롤러에 전달해야한다는 것입니다 (강력하게 형식화 된 구성 개체를 지정하고 서비스 컬렉션에 추가하면 컨트롤러 또는 작업 메서드에 요청할 수 있습니다. IOptions 인스턴스, https://docs.asp.net/en/latest/mvc/controllers/dependency-injection.html )

그래서 이것은 컨트롤러로 간다.

private readonly ConnectionStrings _connectionStrings;
        public HomeController(IOptions<ConnectionStrings> connectionStrings)
        {
            _connectionStrings = connectionStrings.Value;
        }

그런 다음 DAL을 인스턴스화하면 적절한 connectionString

DAL.DataMethods dm = new DAL.DataMethods(_connectionStrings.CustomConnectionString);

모든 예는 이것을 보여 주며, DAL에서 직접 끌어 내려는 시도가 효과가 없었던 이유를 설명하지 않습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow