我在类中有一个泛型方法,如下所示
private static Dictionary<Type, Feed> _singletons = new Dictionary<Type, Feed>();
public static Feed GetFeed<T>() where T:Feed
{
lock(_padlock)
{
if (!_singletons.ContainsKey(typeof(T))
{
_singletons[typeof(T)] = typeof(T).GetInstance();
}
return _singletons[typeof(T)];
}
}
这里,Feed
是一个接口,Type
是实现Feed
接口的类的类型。 GetInstance()
是这些类中的静态方法。 typeof(T).GetInstance();
有什么问题吗?它说System.Type
不包含GetInstance()
的定义。
答案 0 :(得分:2)
最简单的方法是使用new
约束
private static Dictionary<Type, Feed> _singletons = new Dictionary<Type, Feed>();
public static Feed GetFeed<T>() where T:Feed, new()
{
lock(_padlock)
{
if (!_singletons.ContainsKey(typeof(T))
{
_singletons[typeof(T)] = new T();
}
return _singletons[typeof(T)];
}
}
答案 1 :(得分:2)
您可以使用Reflection来调用静态方法,如下所示:
private static Dictionary<Type, Feed> _singletons = new Dictionary<Type, Feed>();
public static Feed GetFeed<T>() where T:Feed
{
lock(_padlock)
{
if (!_singletons.ContainsKey(typeof(T))
{
return typeof(T).GetMethod("GetInstance", System.Reflection.BindingFlags.Static).Invoke(null,null);
}
return _singletons[typeof(T)];
}
}