2010-07-21 9 views
1

런타임시에만 알고있는 statc 메서드를 호출하는 가장 좋은 방법을 찾아야합니다.구성 가능한 메서드를 호출하는 가장 좋은 방법

내 소프트웨어를 사용하는 모든 고객은 suctom string을 반환하는 특별한 방법이 있습니다. 구성 파일에 메서드 이름을 넣은 다음 런타임에이 메서드를 호출하려고합니다.

좋은 방법일까요?

답변

5

주어진 인터페이스를 구현하는 맞춤 클래스가 아닌 이유는 무엇입니까? IMO가 더 좋아야합니다.

당신은 설정에서 정규화 된 클래스 이름을 넣어 반사에 의해 인스턴스화 수 :

Type t = Type.GetType(type_name_from_config); 

IGivenInterface obj = (IGivenInterface) Activator.CreateInstance(t); 
0

반사의 마법을!

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

및 각 고객이 고정되지 않고 실행시 계산해야하는 문자열을 제공 할 필요가있는 경우

1

후 좋은 해결책과 같은 인터페이스를 정의하는 것 고객은이 인터페이스를 구현하는 클래스를 작성해야합니다.

런타임에 이러한 클래스를 동적으로 검색하고로드하는 좋은 방법은 .NET 관리 확장 프레임 워크 (.NET 4.0에서만 사용)를 사용하는 것입니다. MEF를 사용하면 특정 인터페이스를 구현하는 유형이 포함 된 특정 디렉토리에서 어셈블리를 자동으로 검색 할 수 있습니다. '가져 오기'속성을 사용하여 MEF에서 런타임에 이러한 유형의 인스턴스를 동적으로 활성화하고 객체에 대한 참조를 객체에 삽입하도록 할 수 있습니다.

MEF here에 대한 자세한 정보를 찾을 수 있습니다.

관련 문제