1

我需要将多个接口组合成一个运行时来创建一个新类型。例如我可能有以下接口:

public interface IA{ 
}
public interface IB{ 
}

在运行时,我希望能够生成另一个接口,以便在以下 sudo 代码中工作:

Type newInterface = generator.Combine(typeof(IA), typeof(IB));
var instance = generator.CreateInstance(newInterface);

Assert.IsTrue(instance is IA);
Assert.IsTrue(instance is IB); 

有没有办法在.Net C# 中做到这一点?

4

1 回答 1

1

这可能是因为 Castle Dynamic Proxy 的强大功能

public interface A
{
    void DoA();
}

public interface B
{
    void DoB();
}

public class IInterceptorX : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {
        Console.WriteLine(invocation.Method.Name + " is beign invoked");
    }
}


class Program
{
    static void Main(string[] args)
    {
        var generator = new ProxyGenerator();

        dynamic newObject = generator.CreateInterfaceProxyWithoutTarget(typeof(A), new Type[] { typeof(B) }, new IInterceptorX());

        Console.WriteLine(newObject is A); // True

        Console.WriteLine(newObject is B); // True

        newObject.DoA(); // DoA is being invoked
    }
}
于 2013-08-31T18:25:29.183 回答