2012-02-20 6 views
0

내 단위 테스트에서 MVC 프로젝트에서 모든 컨트롤러 유형을 검색하고 BaseController에서 상속하는지 확인하는 linq 쿼리를 개발 중입니다.Linq 쿼리에서 하나의 객체 유형을 제외하는 방법

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)); 
     } 
    } 

감사합니다!

답변

3

음, 마음에 두 가지 옵션 스프링 :

  • 명시 적으로 Except를 사용하여 BaseController을 "제거"

    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); 
    
+0

완벽한 감사합니다! – Swell

관련 문제