Casting-generic - Schnittstelle Unable to cast object of type 'System.RuntimeType' zu geben

Ich habe einige Klassen, wie diese:

public class Customer
{ }

public interface IRepository 
{ }

public class Repository<T> : IRepository
{ }

public class CustomerRepository<Customer>
{ }

Dann, als pro die Antwort auf diese Frage ich kann reflektion verwenden, um eine Liste der Typen, auf die verwiesen wird von Generika für jedes meiner *Repository:

Was ich will, um am Ende mit ist eine Dictionary<Type, IRepository>

Bisher habe ich dieses:

Dictionary<Type, IRepository> myRepositories = Assembly.GetAssembly(typeof(Repository<>))
.GetTypes()
.Where(typeof(IImporter).IsAssignableFrom)
.Where(x => x.BaseType != null && x.BaseType.GetGenericArguments().FirstOrDefault() != null)
.Select(
    x =>
    new { Key = x.BaseType != null ? x.BaseType.GetGenericArguments().FirstOrDefault() : null, Type = (IRepository)x })
.ToDictionary(x => x.Key, x => x.Type);

Jedoch, Sie mag es nicht, meine Besetzung (IRepository)x

Ich bekomme die folgende Fehlermeldung:

Unable to cast object of type 'System.RuntimeType' zu geben 'Meine.Namespace.IRepository'.

  • Wie erwarten Sie, dass es sich um eine Instanz zu erhalten, wenn Sie habe nur eine Type?
InformationsquelleAutor Alex | 2012-09-17
Schreibe einen Kommentar