首页 > 解决方案 > 用于 TimerElapsed 事件的 Castle Windsor 拦截器

问题描述

我有拦截器注册的问题。当我的 System.Timers.Timer Elapsed 事件调用同一类中的方法时,该方法的拦截器不会被调用。如果从此类外部调用该类的任何其他方法,它确实有效。我认为这似乎是这里描述的问题

我有一个通用解决方案,它使用 ContainerExtensions 类注册所有可用的拦截器,如下所示:

public static class ContainerExtensions
{
    public static void AddInterceptor(this IWindsorContainer container, IHandler selector)
    {
        IEnumerable<Type> services = selector.ComponentModel.Services;
        foreach (var service in services)
        {
            var interceptorsSelector = (IModelInterceptorsSelector)container.Resolve(service);
            container.Kernel.ProxyFactory.AddInterceptorSelector(interceptorsSelector);
        }
    }

    public static void RegisterInterceptorSelectors(this IWindsorContainer container)
    {
        var interceptorSelectors = container.Kernel
            .GetAssignableHandlers(typeof(IModelInterceptorsSelector))
            .ToList();

        foreach (var item in interceptorSelectors)
            container.AddInterceptor(item);
    }
}

除了上述链接中描述的解决方案之外,还有其他更好的解决方案吗?我的意思是我们有温莎团队提供的任何解决方案来更好地解决这个问题吗?

标签: .netcastle-windsorinterceptor

解决方案


推荐阅读