在城堡windsor工厂内创建一个类代理

时间:2011-07-17 12:20:40

标签: c# castle-windsor facilities

我正在尝试创建一个工具,它将根据class属性为注册类添加一些拦截器。 这是我的设施:

public class MyFacility : AbstractFacility
{
     protected override void Init()
    {
        this.Kernel.ComponentRegistered += (s, h) =>
        {
            if (h.ComponentModel.Implementation.GetCustomAttributes(typeof(MyAttribute), false).Length > 0)
            {
                h.ComponentModel.Interceptors.Add(InterceptorReference.ForType<MyInterceptor>());
            }
        }
    }
}

但是这样,当我在类方法中使用this关键字时,它引用的是目标类而不是代理类,这使得我使用的某些框架无法正常工作。

我需要使用工具创建使用ProxyGenerator.CreateClassProxy<MyClass>()方法生成的相同代理。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

将该类作为服务暴露在您的组件上。

container.Register(
   Component.For<SomeClass,ISomeInterface>().Lifestyle.Whatever.Interceptors<SomeInterceptor>()
);