How do I tell Windsor to add an Interceptor to all components registered that implement IMustBeIntercepted

不问归期 提交于 2019-11-29 22:13:22

问题


If I registered several components with Windsor.

IAnimal provides BigAnimal IPerson provides SmellyPerson IWhale provides BlueWhale

etc.. pretty standard component registeration

all the above types implement IMustBeIntercepted, how do I tell the container add an interceptor to all types that implement IMustBeImplemented so that when Resolve is called it is returned a BigAnimal with an interceptor as defined since it matches. I know I can do this for each one but its extra XML config or programatic config which I want to avoid


回答1:


Simply create an interface like this:

public interface IMustBeIntercepted {}

and a facility like this:

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

Then register the facility to the container using the <facility> tag. Now all components that implements IMustBeIntercepted will be intercepted by the interceptor TestInterceptor.




回答2:


Just wrote this 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 + "}"
                ))));
    }


来源:https://stackoverflow.com/questions/420891/how-do-i-tell-windsor-to-add-an-interceptor-to-all-components-registered-that-im

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!