ASP.NET MVC アプリケーションに、すべての汎用リポジトリが参照されるインターフェイス/クラスがあります。これは次のようになります。
public interface IDb
{
IGenericRepository<Car> CarRepository { get; }
...
IGenericRepository<User> UserRepository { get; }
}
私の目標は、特定のインターフェイスを実装するアセンブリ内のすべての型を見つけてから、対応する汎用リポジトリを見つけて、データベースからいくつかのオブジェクトを取得することです。これはうまくいくはずです:
List<IVehicle> vehicleElements = new List<IVehicle>();
Type vehicleType = typeof(IVehicle);
Type dbType = typeof(IDb);
foreach (Type type in vehicleType.Assembly.GetTypes().Where(t => t.IsClass && t.GetInterfaces().Contains(vehicleType)))
{
PropertyInfo repositoryInfo = dbType.GetProperties().Where(p => p.PropertyType.GenericTypeArguments.Contains(type)).SingleOrDefault();
if (repositoryInfo != null)
{
var repository = repositoryInfo.GetValue(this.db);
// TODO: work with repository
}
}
return vehicleElements;
私の問題は、リポジトリ変数を必要な汎用 IGenericRepository にキャストする方法がわからないことです...何かアイデアはありますか?