2013-08-31 62 views
1

我需要將多個接口合併爲一個運行時才能創建一個新類型。比如我可能有以下接口:在C運行時將多個接口合併爲一個接口#

public interface IA{ 
} 
public interface IB{ 
} 

在運行時,我希望能夠生成另一個接口,以便在下面的須藤代碼工作:

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#中?

+0

這是沒有意義的權力,你不能創建一個接口類型的對象。只需製作一個實現兩個接口的類就是簡單的方法。 –

+0

@HansPassant如果您使用動態對象框架,則可以創建動態對象。看看Castle動態代理 –

回答

1

這是可能的,因爲城堡動態代理

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 
    } 
} 
+0

在提出這個問題之前,煩惱地看着CreateInterfaceProxyWithoutTarget的重載,並沒有看到類型數組作爲第二個參數。衛生署!謝謝你的幫助。 –