如何从 List 中创建动态代理

本文关键字:创建 动态 代理 List | 更新日期: 2023-09-27 18:31:29

我正在使用已经存在的列表使用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,它们似乎都不起作用。我可以用"普通"对象获得良好的效果。

如何从 List<T> 中创建动态代理

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

您可以改为代理IList<T>