2

既存のリストを使用して 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 を試しましたが、どれも動作しないようです。「通常の」オブジェクトで良い結果を得ることができます。

4

1 に答える 1

3

インデクサー オンList<T>は仮想ではなく、DynamicProxy によってインターセプトできません。

代わりにプロキシできIList<T>ます。

于 2013-09-17T05:01:58.480 に答える