C#返回一个类型而不必知道它

C#返回一个类型而不必知道它,c#,generics,C#,Generics,我想创建一个工厂对象字典,用于依赖项注入 例如,假设我有一个名为ServiceLocator的静态类。应用程序可以使用: ITest test = ServiceLocator<ITest>.GetInstance() 但是用户需要自己强制转换对象: ITest test = (ITest)ServiceLocator<ITest>.GetInstance(); ITest测试=(ITest)ServiceLocator.GetInstance(); 这是相当尴尬的

我想创建一个工厂对象字典,用于依赖项注入

例如,假设我有一个名为ServiceLocator的静态类。应用程序可以使用:

ITest test = ServiceLocator<ITest>.GetInstance()
但是用户需要自己强制转换对象:

ITest test = (ITest)ServiceLocator<ITest>.GetInstance();
ITest测试=(ITest)ServiceLocator.GetInstance();
这是相当尴尬的,可能会导致错误(例如,未正确铸造)

如果有一种写作的方式,那就更好了:

ITest test=ServiceLocator.GetInstance(“ITest”),但还没有弄明白如何做到这一点。

试试这个:

public interface IFactory<T>
    where T: class
{
   T GetInstance<T>();
}
公共接口IFactory
T:在哪里上课
{
T GetInstance();
}

这将
T
限制为引用类型。顺便说一句,这是许多可用方法中的一种。

事实上,我以前也尝试过,但效果相同。然而,你的帖子给了我一个想法,让我在ServiceLocator中的GetInstance方法上尝试一下,这很有效!
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();
   }
}
public interface IFactory
{
  object GetInstance();
}
ITest test = (ITest)ServiceLocator<ITest>.GetInstance();
public interface IFactory<T>
    where T: class
{
   T GetInstance<T>();
}