我正在使用已经存在的列表使用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) { }
    }
}


请帮忙!让我发疯了!我尝试了3.2和2.5版城堡,但它们似乎都不起作用。我可以使用“正常”对象获得良好的效果。

最佳答案

List<T>上的索引器不是虚拟的,并且不能被DynamicProxy拦截。

您可以代替IList<T>

关于c# - 如何从List <T>创建动态代理,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18840604/

10-09 05:37