Dependency injection 如何为继承标记接口的接口注册拦截注入?

Dependency injection 如何为继承标记接口的接口注册拦截注入?,dependency-injection,unity-container,aop,interception,Dependency Injection,Unity Container,Aop,Interception,例如,我想调用以下代码来注册我想要为其注入策略的一整套服务: container .AddNewExtensionIfNotPresent<Interception>().Configure<Interception>().SetDefaultInterceptorFor<IBusinessService>(new InterfaceInterceptor()); 我想我读到你不能从IsomerServcex到IMarkerInter

例如,我想调用以下代码来注册我想要为其注入策略的一整套服务:

container
            .AddNewExtensionIfNotPresent<Interception>().Configure<Interception>().SetDefaultInterceptorFor<IBusinessService>(new InterfaceInterceptor());
我想我读到你不能从IsomerServcex到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());
            }
        }
container.AddNewExtensionIfNotPresent();
Assembly[]assemblies=AppDomain.CurrentDomain.GetAssemblies();
foreach(部件中的部件)
{
Type[]types=assembly.GetTypes()。其中(x=>x.IsClass&&typeof(T)。IsAssignableFrom(x)和&x.GetType()!=typeof(T)).ToArray();
foreach(类型中的类型t)
{
container.Configure().SetDefaultInterceptorFor(t,新的VirtualMethodInterceptor());
}
}
编辑:

上述操作可以使用fluent API完成,这意味着我们对AppDomain.CurrentDomain.GetAssemblys()没有独立的依赖关系(它不包含fluent API配置中应用的过滤)

.Include(If.Implements<IBusinessService>, (x, y) =>
                                                          {
                                                              if (x.IsClass)
                                                                  y.Configure<Interception>().
                                                                      SetDefaultInterceptorFor(x,
                                                                                               new VirtualMethodInterceptor
                                                                                                   ());
                                                          })
.Include(If.Implements,(x,y)=>
{
if(x.IsClass)
y、 配置()。
SetDefaultInterceptorFor(x,
新的虚拟方法接收器
());
})

我可以使用反射和通用扩展方法……您是否知道如何在vb.net中编写此代码?
.Include(If.Implements<IBusinessService>, (x, y) =>
                                                          {
                                                              if (x.IsClass)
                                                                  y.Configure<Interception>().
                                                                      SetDefaultInterceptorFor(x,
                                                                                               new VirtualMethodInterceptor
                                                                                                   ());
                                                          })