Рассмотрим ниже
class ServiceA : IServiceA
{
public void SayHelloFromA()
{
Console.WriteLine("Hello Service A");
Console.ReadKey();
}
}
class ServiceB : IServiceB{ }
class ServiceC : IServiceC{ }
interface IServiceA
{
void SayHelloFromA();
}
interface IServiceB{ }
interface IServiceC{ }
Если я хочу использовать шаблон Service Locator, приведенный пример здесь работает отлично.
Теперь предположим, что другой класс реализует интерфейс IServiceA, как показано ниже.
class ServiceA1 : IServiceA
{
public void SayHelloFromA()
{
Console.WriteLine("Hello Service A1");
Console.ReadKey();
}
}
И соответственно мне нужно добавить сервис в словарь как в
internal ServiceLocator()
{
services = new Dictionary<object, object>();
this.services.Add(typeof(IServiceA), new ServiceA());
this.services.Add(typeof(IServiceA), new ServiceA1());
this.services.Add(typeof(IServiceB), new ServiceB());
this.services.Add(typeof(IServiceC), new ServiceC());
}
И это неправильно, так как в словаре не может быть дубликатов ключей.
Итак, как я могу решить эту проблему? Как должна быть изменена структура данных, чтобы локатор службы мог вместить и то, и другое.
N.B.~ Я пытаюсь реализовать шаблон Srvice Locator в своем фабричном методе.
public class CustomerFactory : ICustomerBaseFactory
{
public IBaseCustomer GetCustomer(string CustomerType)
{
switch(CustomerType)
{
case "1": return new Grade1Customer(); break;
case "2": return new Grade2Customer(); break;
default:return null;
}
}
}
где бетонные заводы происходят от IBaseCustomer
Спасибо