마커 인터페이스를 상속하는 인터페이스에 대한 차단 주입을 등록하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com//questions/11672325

문제

예를 들어 다음 코드를 호출하여 정책을 삽입하려는 전체 서비스 집합을 등록하고 싶습니다.

container
            .AddNewExtensionIfNotPresent<Interception>().Configure<Interception>().SetDefaultInterceptorFor<IBusinessService>(new InterfaceInterceptor());
.

여기서,

ISomeServiceA  : IBusinessService
ISomeServiceB : IBusinessService etc 
.

나는 당신이 cant isomeservcex에서 imarkerinterface 어딘가에있는 것을 읽는 것 같습니다 .... 이것을 확인할 수 있습니다.

도움이 되었습니까?

해결책

짧게로드 된 어셈블리를 살펴보십시오 (필요한 경우 추가 필터링 추가 - 부트 스트랩에서 수행되면 캐싱 없음) 지정된 마커 인터페이스를 구현하는 유형에 대한 기본 인터셉터를 추가하십시오.

        container.AddNewExtensionIfNotPresent<Interception>();
        Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
        foreach (Assembly assembly in assemblies)
        {
            Type[] types = assembly.GetTypes().Where(x => x.IsClass && typeof(T).IsAssignableFrom(x) && x.GetType() != typeof(T)).ToArray();
            foreach (Type t in types)
            {
                container.Configure<Interception>().SetDefaultInterceptorFor(t, new VirtualMethodInterceptor());
            }
        }
.

편집 :

유창한 API를 사용하여 수행 할 수 있으며 AppDomain.CurrentDomain.GetAssemblies ()에 대한 Naiive 의존성이 없음을 의미합니다 () (유창한 API Config 에 적용된 필터링 포함)

.Include(If.Implements<IBusinessService>, (x, y) =>
                                                          {
                                                              if (x.IsClass)
                                                                  y.Configure<Interception>().
                                                                      SetDefaultInterceptorFor(x,
                                                                                               new VirtualMethodInterceptor
                                                                                                   ());
                                                          })
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top