考慮以下如何編寫一個服務定位器模式,其中的具體類實現相同的接口/服務?
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模式,提供here作品完美的例子。
現在說另一個類實現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());
}
添加到字典,這是錯誤的,因爲重複鍵不能出現在字典中。
那麼我該如何解決這個問題呢?應該如何改變數據結構,以便服務定位器可以兼容這兩者。
NB〜我想實現我廠的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
感謝
你將如何檢索特定的實現?服務定位器的全部重點是給你一個IServiceA的實現,而不知道它是哪一個。在你的例子中,你將如何調用服務定位器來獲得特定的實現? (假設你可以有一個帶有重複項的鍵控容器) – Seb 2013-03-25 10:09:19