我正在使用 CaSTLe DynamicProxy2“附加”接口(interface)以从字典中检索字段。例如,给定以下类:
public class DataContainer : IDataContainer
{
private Dictionary<string, object> _Fields = null;
public Dictionary<string, object> Data
{
get { return _Fields ?? (_Fields = new Dictionary<string, object>()); }
}
}
我想使用以下接口(interface)作为接口(interface)代理来从 Fields 字典中提取“Name”值:
public interface IContrivedExample
{
string Name { get; }
}
从拦截器中,我想获取“目标”DataContainer,并返回“Name”值:
public void Intercept(IInvocation invocation)
{
object fieldName = omitted; // get field name based on invocation information
DataContainer container = ???; // this is what I'm trying to figure out
invocation.ReturnValue = container.Fields[fieldName];
}
// Somewhere in code
var c = new DataContainer();
c.Fields.Add("Name", "Jordan");
var pg = new ProxyGenerator();
IContrivedExample ice = (IContrivedExample) pg.CreateInterfaceProxyWithTarget(..., c, ...);
Debug.Assert(ice.Name == "Jordan");
关于如何获得潜在目标的任何想法
注意:这是一个人为的示例,我用它来围绕我的问题建立一些上下文。
最佳答案
我明白了。您必须将代理强制转换为 IProxyTargetAccessor:
public void Intercept(IInvocation invocation)
{
object fieldName = omitted; // get field name based on invocation information
var accessor = invocation.Proxy as IProxyTargetAccessor;
DataContainer container = (DataContainer) accessor.DynProxyGetTarget();
invocation.ReturnValue = container.Fields[fieldName];
}
关于target - 城堡动态代理2 : Get the Target inside an Interceptor?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/826673/