런타임시에만 알고있는 statc 메서드를 호출하는 가장 좋은 방법을 찾아야합니다.구성 가능한 메서드를 호출하는 가장 좋은 방법
내 소프트웨어를 사용하는 모든 고객은 suctom string을 반환하는 특별한 방법이 있습니다. 구성 파일에 메서드 이름을 넣은 다음 런타임에이 메서드를 호출하려고합니다.
좋은 방법일까요?
런타임시에만 알고있는 statc 메서드를 호출하는 가장 좋은 방법을 찾아야합니다.구성 가능한 메서드를 호출하는 가장 좋은 방법
내 소프트웨어를 사용하는 모든 고객은 suctom string을 반환하는 특별한 방법이 있습니다. 구성 파일에 메서드 이름을 넣은 다음 런타임에이 메서드를 호출하려고합니다.
좋은 방법일까요?
주어진 인터페이스를 구현하는 맞춤 클래스가 아닌 이유는 무엇입니까? IMO가 더 좋아야합니다.
당신은 설정에서 정규화 된 클래스 이름을 넣어 반사에 의해 인스턴스화 수 :
Type t = Type.GetType(type_name_from_config);
IGivenInterface obj = (IGivenInterface) Activator.CreateInstance(t);
반사의 마법을!
using System.Reflection;
var type = typeof(YourStaticClass);
var customstring = type.InvokeMember
(
"methodname",
BindingFlags.InvokeMethod,
Type.DefaultBinder,
null,
null
);
이렇게하면 원하는 사용자 저장소에 메서드 이름을 간단한 문자열로 저장할 수 있습니다. ASP.NET 사이트 인 경우 사용자 프로필을 사용하거나 격리 된 저장소 또는 일부 사용자 범위 응용 프로그램 설정을 사용할 수 있습니다. 각각에게 다음
public interface ICustomerInfo
{
string CustomerStringValue { get; }
}
및 각 고객이 고정되지 않고 실행시 계산해야하는 문자열을 제공 할 필요가있는 경우
후 좋은 해결책과 같은 인터페이스를 정의하는 것 고객은이 인터페이스를 구현하는 클래스를 작성해야합니다.
런타임에 이러한 클래스를 동적으로 검색하고로드하는 좋은 방법은 .NET 관리 확장 프레임 워크 (.NET 4.0에서만 사용)를 사용하는 것입니다. MEF를 사용하면 특정 인터페이스를 구현하는 유형이 포함 된 특정 디렉토리에서 어셈블리를 자동으로 검색 할 수 있습니다. '가져 오기'속성을 사용하여 MEF에서 런타임에 이러한 유형의 인스턴스를 동적으로 활성화하고 객체에 대한 참조를 객체에 삽입하도록 할 수 있습니다.
MEF here에 대한 자세한 정보를 찾을 수 있습니다.