Я нахожусь в процессе создания фабричного метода, который использует общий абстрактный тип типа, чтобы возвращать экземпляр конкретного производного типа с использованием отражения. Напр.Метод Generic Factory для создания производного класса из базового класса
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>();
Проблема в том, что я не могу понять, какой-либо элегантный способ для фабричного метода для создания экземпляра производного типа передается абстрактный базовый тип в методе. Единственное, что я могу придумать, это поддерживать словарь, содержащий карту между абстрактной базой и соответствующим производным классом, но это кажется мне как запах кода. Может ли кто-нибудь предложить лучшее решение.
Ну, предположим, у вас было две различные конкретные реализации абстрактного класса - как бы вы хотели принять решение тогда? –
Это точно моя забота. Только в моем конкретном случае я знаю, что будет только одна конкретная реализация. Но все же я искал более элегантный способ решения проблемы. – koder
Вы пытаетесь создать прокси-сервер WCF? Меня интересовал бы полный контекст, потому что вы можете попытаться воссоздать колесо. – Bronumski