리플렉션을 사용하여 구체 파생 형 인스턴스를 반환하기 위해 일반 추상 형식 매개 변수를 사용하는 팩터 리 메서드를 만드는 중입니다. 예를 들면.기본 클래스에서 파생 클래스를 인스턴스화하는 일반 팩터 리 메서드
public abstract class ServiceClientBase : IServiceClient
{
}
public abstract class Channel : ServiceClientBase
{
}
public class ChannelImpl : Channel
{
}
public class ServiceClientFactory
{
public T GetService<T>() where T : class, IServiceClient
{
// Use reflection to create the derived type instance
T instance = typeof(T).GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, new Type[] { typeof(string) }, null).Invoke(new object[] { endPointUrl }) as T;
}
}
사용법 :
Channel channelService = factory.GetService<Channel>();
문제는 내가 파생 된 유형을 인스턴스화하는 팩토리 메소드에 대한 어떤 우아한 방법을 알아낼 수있는 방법의 추상 기본 유형을 전달되고 있다는 점이다. 필자가 생각해 낼 수있는 유일한 것은 추상베이스와 상응하는 파생 클래스 사이에 맵을 포함하고있는 Dictionary를 유지하는 것이지만 이것은 코드 냄새와 같은 것으로 보인다. 누구나 더 나은 솔루션을 제안 할 수 있습니까?
글쎄, 당신이 추상 클래스의 두 가지 구체적인 구현을했다고 가정 해 - 그 결정을 어떻게 내리고 싶습니까? –
그건 내 관심사 야. 필자의 경우 특정 구현이 하나만 있다는 것을 알고 있습니다. 하지만 여전히 문제를 해결할 더 우아한 방법을 찾고있었습니다. – koder
WCF 프록시를 만들려고합니까? 휠을 다시 만들려고 노력 중이므로 전체 컨텍스트에 관심이 있습니다. – Bronumski