Me encuentro con un problema de genéricos mientras trabajo en un controlador genérico de Inyección de Dependencia (un localizador de servicios básico).¿Cómo se puede convertir T en una clase para que coincida con una restricción "donde T: clase"?
Edición 1 (para mayor claridad)
Bueno por lo que en realidad estoy usando SimpleInjector como un dispositivo de resolución DI y tiene la restricción de clase en su método GetInstance, asi que aquí hay algo más de código completo:
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);
}
}
Editar 2 - código final, ya que tiene un aspecto extraño en los comentarios:
public T GetInstance<T>()
{
try
{
if(typeof(T).IsClass)
{
return (T) _container.GetInstance(typeof(T));
}
}
catch(ActivationException aEx)
{
return default(T);
}
}
Tal vez si supiéramos más acerca de por qué usted está interesado en hacer esto, aparte de un ejemplo nula regresar ...? Podría ser una mejor forma de estructurarlo. –
Consulte la edición 1 de por qué quiero hacer esto. – Laurence