简体   繁体   中英

Combine multiple interfaces into one at runtime in C#

I need to combine multiple interfaces a runtime to create a new type. For example I might have the following interfaces:

public interface IA{ 
}
public interface IB{ 
}

At runtime I want to be able to generate another interface so that in the following sudo code works:

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

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

Is there a way to do this in .Net C#?

It is possible because of power of 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
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM