Pregunta

Por ejemplo, me gustaría llamar al siguiente código para registrar un conjunto completo de servicios que quiero inyectar una política para:

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

donde:

ISomeServiceA  : IBusinessService
ISomeServiceB : IBusinessService etc 

Creo que leí que usted no puedo obtener de Isomeservcex a ImarkerInterface en algún lugar ... Se puede confirmar esto.

¿Fue útil?

Solución

En resumen, mire los ensamblajes cargados (agregue un filtrado adicional si es necesario, no hay almacenamiento en caché si se realiza en BootStrap) Agregue los interceptores predeterminados para los tipos que implementan la interfaz marcadora designada.

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

Editar:

Lo anterior se puede hacer usando la API fluida y significa que no tenemos la dependencia de NAIIVE en AppDomain.currentDomain.getassemblies () (que no contendría el filtrado aplicado en la configuración de API con fluidez

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top