ジェネリック抽象型パラメーターを使用して、リフレクションを使用して具象派生型のインスタンスを返すファクトリメソッドを作成中です。たとえば。
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>();
問題は、ファクトリメソッドがメソッド内の抽象基本型に渡される派生型をインスタンス化するための洗練された方法を理解できないことです。私が思いつくことができる唯一のことは、抽象ベースと対応する派生クラスの間のマップを含む辞書を維持することですが、これはコードの臭いのように私には思えます。誰かがより良い解決策を提案できますか?