对于我的单元测试中的一个,我正在开发一个linq查询,该查询从MVC项目中检索所有控制器类型,并确保它继承自BaseController。
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
如何从此列表中删除BaseController对象?我已经尝试了几件事,但它总是从列表中删除所有不从BaseController继承的控制器。
这是单元测试
[Fact]
public void All_Controllers_Inherit_From_BaseController()
{
var controllers = typeof(MvcApplication).Assembly.GetTypes().Where(typeof(IController).IsAssignableFrom);
foreach (var controller in controllers)
{
Assert.True(controller.BaseType == typeof(BaseController));
}
}
谢谢!
答案 0 :(得分:3)
嗯,我想到两个选择:
使用BaseController
明确“删除”Except
:
var controllers = typeof(MvcApplication).Assembly
.GetTypes()
.Except(new[] { typeof(BaseController) })
.Where(typeof(IController).IsAssignableFrom);
只考虑具体类型;我认为BaseController
是抽象的:
var controllers = typeof(MvcApplication).Assembly
.GetTypes()
.Where(type => !type.IsAbstract)
.Where(typeof(IController).IsAssignableFrom);