내가 외부 DLL에 대한 참조가있는 프로그램이 있습니다로드 다른 라이브러리를 동적으로
magic.externalFunctions.nosql.dll
이를 : 나는 대신 다음해야 할 수도 있습니다
magic.externalFunctions.sql.dll
대상 시스템에 따라 DLL은 동일한 기능을 제공하는 외부 라이브러리입니다. 공용 메소드와 속성조차 동일합니다. 그러나 에는 인터페이스 또는 기본 클래스가 결합되어 있지 않습니다.
이제 대상 시스템에 따라이 두 라이브러리를 선택해야합니다. 반사의 과도한 양을 사용하지 않고이 문제를 해결하기 위해 어떤 방법이 있나요
public class DoDatabaseStuff() {
private IMagic _magic
public DoDatabaseStuff(bool useNoSql) {
if (useNoSql) {
_magic=new SqlMagic();
} else {
_magic=new NoSqlMagic();
}
myTable=_magic.Table.Create("CustomerTable");
myTable.Columns.Add(typeof(int),"ID");
myTable.Columns.Add(typeof(string),"Name");
}
}
: 그들은 이에게 공통의 인터페이스를했을 경우 내가 좋아하는 일을 할 것인가? 나는 여전히 myTable.Columns.Add()
대신 tableType.GetMethod("Add").Invoke()...
대신
과 같은 것을 사용하고 싶다. 다른 빌드 구성을 사용하는 csproj에서 조건을 사용하고 싶지는 않다. 이론적으로는 작동하지만 csproj가 자동으로 변경 될 때마다 오류가 발생합니다 (예 : 너겟 패키지 업데이트)
동일한 작업을 수행하는 여러 라이브러리간에 전환하고자하는 이유는 무엇입니까? 확실히 비효율적 인 방법이고 종속성이 증가합니다 – jasttim
하지만 이렇게해야 할 경우 헬퍼 메서드를 만들어서 SQL 라이브러리를 호출하고 NON SQL 라이브러리를 호출 할 수 있습니다 – jasttim
우리는 프로그램을 두 개의 다른 플랫폼에 설치하십시오. 현재 우리는 동일한 소스 파일을 포함하지만 서로 다른 참조를 포함하는 두 개의 프로젝트가 있지만 구조가 변경되면 오류의 큰 원인이됩니다. 같은 문제를 해결하기 위해 두 가지 다른 git 브랜치를 만들려고했습니다. 여기에서 가장 중요한 문제는 EXTERNAL 라이브러리입니다. 이것이 우리 자신의 코드라면 다른 방식으로했을 것입니다. –