我的 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 ...有什么想法吗?