2

.NET Framework 4.6.1 응용 프로그램에서 사용되는 .NET Standard 2.0 라이브러리를 만들고 있습니다.
이 라이브러리에는 EF 코어가 필요하지만 app.config를 읽는 방법을 알 수 없습니다..NET Standard 2.0 라이브러리에서 app.config 읽기

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
{ 
    optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString); 
} 

를하지만의 ConfigurationManager는 .NET 표준 2.0에서 아무데도 찾을 수 없기 때문에 나는 그것을 할 수 없습니다 닷넷 프레임 워크 라이브러리에서

나는이처럼 내 DBContext를 초기화합니다.
.NET Standard 2.0 라이브러리에서 구성 파일을 읽으려면 어떻게해야합니까?

+0

'.NET Core' /'.NET Standard'는'XML'보다는'JSON' 파일에 많이 사용됩니다. XML 파일을 읽을 필요가 있다면,'Microsoft.Extensions.Configuration.Xml' 패키지에 대한 참조를 추가해야합니다. 자세한 내용은 [here] (https://stackoverflow.com/questions/40036819/how-to-pull-configuration-settings-from-xml-file-in-startup-cs)를 참조하십시오. –

+4

XML 구성을 읽는 이유 파일 (.NET Framework 개념)을 .NET 표준 라이브러리에 저장 하시겠습니까? 특히 이식성이 아닙니다. 그런 점에서 일반 .NET Framework에서도 라이브러리의 설정을 읽는 것이 좋습니다. 대신 응용 프로그램에서 연결 문자열을 삽입하십시오. 구성 파일을 문제없이 읽을 수 있습니다. –

+0

@ JeroenMostert가 언급 한 것을 수행하기 위해 생성자에서'DbContextOptions '을 수락 할 수 있습니다 –

답변

1

인터페이스를 만들고 연결 문자열에 대한 의존성 반전을 사용하므로 코드는 .NET 프레임 워크에서 실행되는 소비하는 응용 프로그램은 다음 자체 설정 구현을 만들고 그것을 전달할 수

public interface IConnectionSettings 
{ 
    string MyDatabaseConnectionString { get; } 
} 

class MyClass 
{ 
    private readonly IConnectionSettings _connectionSettings; 

    public MyClass(IConnectionSettings connectionSettings) 
    { 
     _connectionSettings = connectionSettings; 
    } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlServer(_connectionSettings.MyDatabaseConnectionString); 
    } 
} 

처럼 보일 것입니다

public class ConfigurationManagerConnectionSettings : IConnectionSettings 
{ 
    public string MyDatabaseConnectionString { get; } 
     = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString; 
} 

var s = new ConfigurationManagerConnectionSettings(); 
var myClass = new MyClass(s); 

그리고 모든 유행을 좇는 아이가 사용할 수있는 환경 변수 :

public class EnvironmentVariableConnectionSettings : IConnectionSettings 
{ 
    public string MyDatabaseConnectionString { get; } 
     = Environment.GetEnvironmentVariable("MyDatabaseConnectionString"); 
} 

모두에게 이기기

관련 문제