我正在创建一个工厂方法,该方法使用通用抽象类型参数来使用反射返回具体派生类型的实例。例如。
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>();
问题是我想不出任何优雅的方法让工厂方法实例化在方法中传递抽象基类型的派生类型。我唯一能想到的就是维护一个字典,其中包含抽象基和相应派生类之间的映射,但这在我看来就像代码异味。任何人都可以提出更好的解决方案。