StructureMap с перехватом и Castle.DynamicProxy - PullRequest
1 голос
/ 07 мая 2010

Я пытаюсь заставить 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 голосов
/ 11 августа 2010

Немного поздно, но приведенный ниже код должен работать (учитывая, что запрошенный тип является экземпляром)

var interfaceToTarget = context.BuildStack.Current.RequestedType;
...