我正在使用Castle Dynamic Proxy CreateClassProxyWithTarget使用已有的列表。基本上,我想拦截对列表索引器的调用。
我尝试了一堆组合来实现这个目标,但每次创建的代理返回一个空列表。
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Castle.DynamicProxy;
namespace DP
{
class Program
{
private static readonly ProxyGenerator _generator = new ProxyGenerator(new PersistentProxyBuilder());
static void Main(string[] args)
{
ListString ls = new ListString();
ls.Add("hello");
List<string> ls2 = (ListString)_generator.CreateClassProxyWithTarget(typeof(ListString), ls, new Interceptor());
var x = ls2[0];
}
}
public class ListString : List<String>
{
public ListString() : base() { }
public ListString(IEnumerable<String> strings) : base(strings) { }
}
}
请帮忙!这让我很生气!我尝试过Castle 3.2和2.5,它们似乎都没有用。我可以用“普通”物体取得好成绩。
答案 0 :(得分:3)
List<T>
上的索引器不是虚拟的,不能被DynamicProxy截获。
您可以代替IList<T>
。