我们有大约300个POCO对象,每个对象都继承自IEntity接口。在我们的服务层中,我们有一个IRepository和一个DbContext,其中包含为每个POCO类指定的所有EntityTypeConfiguration。
我们正在尝试对这些进行单元测试以确保映射是正确的。有没有办法可以为程序集中的所有IEntity对象自动调用我们的helper方法。
internal static void TestRepositoryForEntity<T>(T obj) where T : class, IEntity
{
ILogger logger = new Logging.NLog.NLogLogger(null);
IConnectionProvider connectionProvider = new ConnectionProvider(logger);
IEntityRepository<T> testRepo = new BaseEntityRepository<T>(connectionProvider);
var allResults = testRepo.GetAll();
foreach (var item in allResults)
{
Console.WriteLine(item);
}
}
目前我们称之为:
Helpers.EntityContextHelper.TestRepositoryForEntity(new Zinc.Entities.User());
但是,如果我尝试获取所有IEntity对象并在帮助器中传递那些超过T类型的对象是IEntity,并且找不到正确类型的映射。
答案 0 :(得分:0)
将对象的实例作为参数传递似乎有些奇怪;为什么不删除它,只需拨打TestRespositoryForEntity<Zinc.Entities.User>()
。 (如果一个类型是抽象的怎么办?)无论如何;如果你有一个组件,你可以调用这样的通用方法:
var assembly = typeof (User).Assembly;
var typeList = assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract
&& typeof (IEntity).IsAssignableFrom(t));
MethodInfo testMethodInfo =
typeof (Helpers.EntityContextHelper)
.GetMethod("TestRepositoryForEntity").GetGenericMethodDefinition();
foreach (var type in typeList)
{
Console.WriteLine("Checking type {0}", type.FullName);
//we need an instance;
object instance = Activator.CreateInstance(type);
//create the correct generic method:
var testMethodToCall = testMethodInfo.MakeGenericMethod(type);
//invoke
testMethodToCall.Invoke(null, new [] { instance });
}