Por que estou recebendo o erro "O parâmetro type deve ser invariantemente válido ..."?

Tentarei encurtar este exemplo de código:

public interface IThing
{
    //...  Stuff
}

public class Thing1 : IThing
{  
}

public class Thing2 : IThing
{  
}

public interface IThingView<out T>
{
    ICollection<T> ViewAll();
}

public class ThingView<T> : IThingView<T>
{
    ICollection<T> ViewAll() { return new List<T>(); }  //  There's a big operation here
}

public interface IThingViewerFactory
{
    public IThingView<IThing> Build(string Which);
}

public class ThingViewerFactory
{
    public IThingView<IThing> Build(string Which)
    {
        if(Which.Equals("Thing1") { return new (IThingView<IThing>)new ThingViewer<Thing1>();}
        else { return new (IThingView<IThing>)new ThingViewer<Thing2>();}
    }
}

Essa é uma idéia aproximada do que estou fazendo. Eu tenho várias classes de coisa que exigem um visualizador, que seguirá uma interface comum. Eu gostaria que uma fábrica os gerasse passando uma string com o nome. Continuo recebendo um erro do compilador reclamando:

Variação inválida: o parâmetro de tipo 'T' deve ser invariávelmente válido em 'IThingView.ViewAll ()'. 'T' é covariante.

Sei que mesmo que isso funcione, terei que fazer alguns testes depois ... Estou bem com isso. E percebo que essa abordagem provavelmente não é necessária. Neste ponto, isso se tornou mais uma questão de orgulho / curiosidad

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion