Я пытаюсь заставить 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;
}
}