2014-10-13 4 views
2

나는 CQS posts by .net junkie을 따르고 QueryProcessor을 구현했습니다. 이 게시물에서 그가 인용 : - IQueryProcessor 우리가 는 시스템의 모든 쿼리에 대한 해당 쿼리 처리기가 확인하는 테스트를 작성하는 것을 의미합니다 사용IsFosedTypeOf를 autofac에서 simple.injector로 변환

, 는 DI 프레임 워크는 당신을 위해이를 확인할 수 없기 때문에 . 확장 메서드 IsClosedTypeOf(typeof(IQuery<>))를 사용 을 사용하여 테스트를 만들었습니다이 게시물 다른 사람의 의견에

내가 변환하는 방법을 해결하기 위해 고군분투하지만

를 사용하고 싶습니다/확장 메서드를 만들 IsClosedTypeOf auto-fac을 사용하지 않고 사용 하시겠습니까?

var allQueryTypes = Assembly.GetAssembly(typeof(IQuery<>)).GetTypes() 
      .Where(t => t.IsClass && t.IsClosedTypeOf(typeof(IQuery<>))) 
      .ToList(); 

나는 test code

소스 autofac에 익숙하지 않은 나처럼 IsClosedTypeOf가하는 일조차 100 % 확신합니다.

+0

우리는 한번 Simple Injector에 공개'IsClosedTypeOf' 확장 메소드를 추가하는 것을 고려했으나 결국에는 결정하지 않았습니다. 유용한 확장 방법이지만 Simple Injector API를 오염시킬 수 있습니다. 이것은 일반적인 구조이므로이 확장 메서드는 DI 컨테이너가 아니라 .NET BCL 자체에 추가해야하는 것입니다. – Steven

답변

3
var allQueryTypes = 
    from assembly in AppDomain.CurrentDomain.GetAssemblies() 
    from type in assembly.GetTypes() 
    where !type.IsAbstract && !type.IsGenericTypeDefinition 
    let queryInterfaces = 
     from iface in type.GetInterfaces() 
     where iface.IsGenericType 
     where iface.GetGenericTypeDefinition() == typeof(IQuery<>) 
     select iface 
    where queryInterfaces.Any() 
    select type; 
+2

완벽한, 감사합니다. 좋은 블로그 btw. 소프트웨어 제작 방법을 정말 좋아합니다. – Rippo

관련 문제