2
我想創建一個可用於依賴注入的工廠對象字典。C#返回一個類型而不必知道它
例如,假設我有一個名爲ServiceLocator的靜態類。一個應用程序可以使用:
ITest test = ServiceLocator<ITest>.GetInstance()
得到一個實現ITest接口的對象。
要實現這一點,我首先創建了一個接口IFactory的
public interface IFactory<T>
{
T GetInstance<T>();
}
然後,例如,ITEST的具體實現可以是這個樣子:
public class TestFactory : IFactory<ITest>
{
public ITest GetInstance<ITest>
{
return new (ITest)OneImplementationOfITest();
}
}
服務定位,然後像這樣定義的:
public static class ServiceLocator
{
private static Dictionary<string,object> m_Factories;
public static T GetInstance<T>
{
string type = typeof(T).ToString();
return ((IFactory<T>)Factories[type]).GetInstance();
}
}
不幸的是,IFactory中的T給出了一個compil ER錯誤:
「T必須是引用類型,以便用它作爲通用型方法的參數T ......」
我可以想辦法解決這個問題,例如定義代替的IFactory IFactory控件的:
public interface IFactory
{
object GetInstance();
}
但隨後用戶將需要轉換的對象本身:這是相當尷尬,並可能導致錯誤
ITest test = (ITest)ServiceLocator<ITest>.GetInstance();
(如不正確的澆鑄)
更妙的是,如果有寫方式:
ITEST測試= ServiceLocator.GetInstance(「ITEST」),但還沒有想出如何做到這一點。
其實我以前曾嘗試過,結果相同。然而,你的文章給了我一個想法,在服務定位器中的GetInstance方法上嘗試它,並且工作! –