我正在尝试让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;
}
}
答案 0 :(得分:0)
有点晚了,但下面的代码应该可以工作(假设请求的类型是一个实例)
var interfaceToTarget = context.BuildStack.Current.RequestedType;