在C#中将多个接口合并到一个运行时

时间:2013-08-31 18:01:04

标签: c# types interface

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

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#中执行此操作?

1 个答案:

答案 0 :(得分: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
    }
}