2009-01-07 6 views
5

Wenn ich mehrere Komponenten mit Windsor registriert habe.Wie sage ich Windsor, dass ich allen registrierten Komponenten, die IMustBeIntercepted implementieren, einen Interceptor hinzufügen soll

IAnimal bietet BigAnimal IPerson bietet SmellyPerson iWhale bietet Bluewhale

etc .. ziemlich Standardkomponente registeration

alle oben genannten Typen IMustBeIntercepted implementieren, wie kann ich feststellen, den Container ein Abfangjäger für alle Arten hinzufügen, dass Implementiere IMustBeImplemented, so dass beim Aufrufen von Resolve ein BigAnimal mit einem Interceptor zurückgegeben wird, wie es definiert ist, da es übereinstimmt. Ich weiß, ich kann dies tun für jeden, aber seine zusätzliche XML-Konfigurations oder programatic Config, die ich

Antwort

5

Erstellen Sie einfach eine Schnittstelle wie dies vermeiden wollen:

public interface IMustBeIntercepted {} 

und eine Einrichtung wie folgt aus:

public class InterceptionFacility : AbstractFacility { 
    protected override void Init() { 
     Kernel.ComponentRegistered += new Castle.MicroKernel.ComponentDataDelegate(Kernel_ComponentRegistered); 
    } 

    void Kernel_ComponentRegistered(string key, Castle.MicroKernel.IHandler handler) { 
     if(typeof(IMustBeIntercepted).IsAssignableFrom(handler.ComponentModel.Implementation)) { 
      handler.ComponentModel.Interceptors.Add(new InterceptorReference(typeof(TestInterceptor))); 
     } 
    } 
} 

Dann registrieren Sie die Einrichtung für den Container mit dem Tag <facility>. Jetzt werden alle Komponenten, die IMustBeIntercepted implementieren, vom Interceptor TestInterceptor abgefangen.

+0

Es funktioniert! Und .. es hat mich gerettet! – dtroy

2

schrieb gerade dieses Baby:

public static BasedOnDescriptor WithInterceptor(this BasedOnDescriptor reg, string interceptorComponentName) { 
     return reg.Configure(x=> x.Configuration(
       Child.ForName("interceptors").Eq(
        Child.ForName("interceptor").Eq(
         "${" + interceptorComponentName + "}" 
       )))); 
    } 
Verwandte Themen