2014-04-17 3 views
0

정적 메서드가 포함 된 정적 클래스 HelperMethods이 있습니다. HelperMethods이 포함 된 어셈블리에서 동적으로 메서드를 호출해야하지만이 어셈블리는 때로는 사용할 수 있습니다. 따라서 필요한 어셈블리를 포함하는 어셈블리에 대한 참조를 가질 수 없습니다. 또한 ServiceHost에서 파생 된 사용자 정의 객체 SpecificServiceHost을 생성하기 때문에이 메소드의 코드를 복사 할 수 없지만 코드의 다른 부분은 ServiceHost 객체라는 것을 알아야합니다. SpecificServiceHost을 사용할 수없는 경우이 메서드는 일반 ServiceHost 개체를 만듭니다.Params 인수가있는 MethodInfo.Invoke

private ServiceHost TryFindSpecialServiceHost() 
{ 
    try 
    { 
    var dynamicType = Type.GetType("Common, SuperApplication.Common.HelperMethods", true); 
    // Should find "public static SpecificServiceHost CreateSpecificServiceHost(Type serviceType, params Uri[] baseAddresses)" method 
    var createServiceHost = dynamicType.GetMethod("CreateSpecificServiceHost", 
                BindingFlags.Public | BindingFlags.Static, 
                null, 
                new[] { typeof(Type), typeof(Uri[]) }, 
                null); 
    var dynamicInstance = createServiceHost.Invoke(null, new object[] { typeof(IMyWcfServiceContract), null }); 

    return (ServiceHost) dynamicInstance; 
    } 
    catch 
    { 
    return new ServiceHost(typeof(IMyWcfServiceContract)); 
    } 
} 

이제 createServiceHost.InvokebaseAddresses 인해 프레임 워크 ServiceHost의 구현에 null를 안된다는 예외가 발생합니다. params 인수는 null 개의 참조를 허용 할 것이라고 생각했습니다. 그러나 그렇지 않습니다! 어떻게해야합니까? 감사!

답변

0

죄송합니다. 나는 방금 나 자신을 발견했다. .. 그것은 나의 매우 어리 석다! :)

은 간단하게 변경 :

var dynamicInstance = createServiceHost.Invoke(null, new object[] { typeof(IMyWcfServiceContract), new Uri[0]}); 

는 기본 주소의 빈 목록을 초기화하려면!