私はこのようないくつかのクラスを持っています:
public class Customer
{ }
public interface IRepository
{ }
public class Repository<T> : IRepository
{ }
public class CustomerRepository<Customer>
{ }
次に、この質問への回答に従って、リフレクションを使用して、各 *Repository のジェネリックによって参照される型のリストを取得できます。
私が終わらせたいのはDictionary<Type, IRepository>
これまでのところ、私はこれを持っています:
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);
ただし、私のキャストが好きではありません(IRepository)x
。次のエラーが表示されます。
タイプ 'System.RuntimeType' のオブジェクトをタイプ 'My.Namespace.IRepository' にキャストできません。