使用Castle Dynamic Proxy 2添加额外的界面?

| 我想为现有类型创建一个动态代理,但添加一个新接口的实现,该接口尚未在目标类型上声明。我不知道如何实现这一目标。有任何想法吗?     
已邀请:
        您可以使用具有
additionalInterfacesToProxy
参数的
ProxyGenerator.CreateClassProxy()
重载。例如,如果您有一个带有字符串名称属性的类,并想在其中添加一个枚举名称字符的“ 2”字,则可以这样进行:
public class Foo
{
    public virtual string Name { get; protected set; }

    public Foo()
    {
        Name = \"Foo\";
    }
}

class FooInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        if (invocation.Method == typeof(IEnumerable<char>).GetMethod(\"GetEnumerator\")
            || invocation.Method == typeof(IEnumerable).GetMethod(\"GetEnumerator\"))
            invocation.ReturnValue = ((Foo)invocation.Proxy).Name.GetEnumerator();
        else
            invocation.Proceed();
    }
}

…

var proxy = new ProxyGenerator().CreateClassProxy(
    typeof(Foo), new[] { typeof(IEnumerable<char>) }, new FooInterceptor());

Console.WriteLine(((Foo)proxy).Name);
foreach (var c in ((IEnumerable<char>)proxy))
    Console.WriteLine(c);
请注意,如果您不想代理
Name
属性,则此处不必是虚拟的。     
        使用重载来创建接受
additionalInterfacesToProxy
参数的代理     

要回复问题请先登录注册