我在处理通用依赖注入处理程序(基本服务定位器)时遇到了泛型问题。
编辑 1(为清楚起见)
好的,所以我实际上使用 SimpleInjector 作为 DI 解析器,它的 GetInstance 方法具有类约束,所以这里有一些更完整的代码:
public T GetInstance<T>() where T : class
{
try
{
// works
return _container.GetInstance<T>();
}
catch( ActivationException aEx )
{
return default( T );
}
}
public T GetInstance<T>()
{
try
{
if( typeof( T ).IsClass )
{
// does not work, T is not a reference type
return _container.GetInstance<T>();
}
}
catch( ActivationException aEx )
{
return default( T );
}
}
编辑 2 - 最终代码,因为它在评论中看起来很奇怪:
public T GetInstance<T>()
{
try
{
if( typeof( T ).IsClass )
{
return (T) _container.GetInstance(typeof(T));
}
}
catch( ActivationException aEx )
{
return default( T );
}
}