带拦截的StructureMap和Castle.DynamicProxy

时间:2010-05-07 14:20:08

标签: .net structuremap aop ioc-container

我正在尝试让StructureMap将Castle.DynamicProxy放在它创建的一些对象周围。我之前使用过EnrichWith功能,但我认为RegisterInterception在这种情况下更适合我,因为我使用扫描。

问题是在“进程(对象目标,IContext上下文)”方法中,我无法找出SM尝试获取的接口,只能找到具体的类。我可以找到这个类实现的所有接口,但是如果它实现了多个接口,我不知道如何找到实际请求的接口。有没有办法做到这一点?

以下是一些代码:

    public class SMInterceptor : TypeInterceptor
    {
        private readonly IInterceptor _interceptor;
        private readonly ProxyGenerator _proxyGenerator;


        public SMInterceptor(IInterceptor interceptor, ProxyGenerator proxyGenerator)
        {
            _interceptor = interceptor;
            _proxyGenerator = proxyGenerator;
        }

        public static List<Type> TypesToIntercept = new List<Type>();

        public object Process(object target, IContext context)
        {
            var interfaceToTarget = // This is where I want the target interface!
            var decorator = _proxyGenerator.CreateInterfaceProxyWithTarget(interfaceToTarget, target, _interceptor);
            return decorator;
        }

        public bool MatchesType(Type type)
        {
           return true;
        }
   }

1 个答案:

答案 0 :(得分:0)

有点晚了,但下面的代码应该可以工作(假设请求的类型是一个实例)

var interfaceToTarget = context.BuildStack.Current.RequestedType;