Występuje problem generyczny podczas pracy nad ogólnym program obsługi Dependency Injection (podstawowy lokalizator usług).W jaki sposób można rzucić T na klasę, aby dopasować ograniczenie "tam, gdzie: klasa"?
Edycja 1 (dla jasności)
Ok więc ja rzeczywiście przy SimpleInjector jako rezolwerem DI i ma klasę ograniczenia na jego metoda GetInstance, więc tutaj jest trochę bardziej kompletny kod:
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);
}
}
Edycja 2 - ostateczny kod, ponieważ wygląda dziwnie w komentarzach:
public T GetInstance<T>()
{
try
{
if(typeof(T).IsClass)
{
return (T) _container.GetInstance(typeof(T));
}
}
catch(ActivationException aEx)
{
return default(T);
}
}
Może gdybyśmy wiedzieli więcej o tym, dlaczego jesteś zainteresowany w ten sposób, oprócz powracającego zerowej przykład ...? Może to być lepszy sposób na jej ukształtowanie. –
Zobacz edycję 1, dlaczego chcę to zrobić. – Laurence