2016-03-16 58 views
0

我在我的應用程序中使用存儲庫結構。如何通過C#中的反射創建接口類的引用#

我有一個接口類IDemoService

public interface IDemoService 
{ 
    bool CreateDemo(Demo demo); 
    bool UpdateDemo(Demo demo); 
    bool DeleteDemo(int id); 
    Demo GetDemo(int id); 
    Demo GetDemoServiceByName(string name); 
    IEnumerable<Demo> GetAllDemo(); 
    void SaveRecord(); 
} 

使用的System.Reflection;我需要建立基準像

IDemoService iDemoService; 

我到目前爲止已經試過這樣:

var iDemoServiceClass = asm.GetTypes().Where(p => 
    p.Namespace == nameSpace && 
    p.Name == "IDemoService" 
    ).ToList(); 
Type iDemoServiceClassType = iDemoServiceClass.FirstOrDefault(); 
var className = iDemoServiceClassType.Name; 
var functionName = "Get" + iDemoServiceClassType + "ByName"; 
MethodInfo getMethod = demoServiceClassType.GetMethod(functionName); 

var instanceCreate = Activator.CreateInstance(iDemoServiceClassType);//, null); //here I want to create reference instead instance 
ParameterInfo[] parameters = getMethod.GetParameters(); 

if (parameters.Length > 0) 
{ 
    object[] parametersArray = new object[] { "RequiredDemo" }; 
    var demoObj = getMethod.Invoke(instanceCreate, parametersArray); 
} 

既然是接口,因此無法創建實例,但基準是可能的。那麼,是否有可能使用反射或其他方式創建參考? 請幫助我正確的方式。感謝提前:D

+0

引用allways指向一個類的實例。你不能「創建一個參考」。僅創建實現接口的類的實例。 – HimBromBeere

+0

是不可能創建像IDemoService iDemoService的引用;通過反思?我的問題只在這裏 –

+0

你總是需要一個參考點指向的實例。什麼應該「創造一個參考」呢?指向沒有?沒有任何東西指向沒有任何東西,所以參考是與一個類的實際對象有關的。你必須創建一個實現你的接口的類的實例。 – HimBromBeere

回答

0

你不能實例化一個接口,所以你不能創建一個對它的引用。您需要一個實現該接口的具體類型,而不是使用Activator.CreateInstance

問題是,一個接口只是一個合同,而不是一個真正的實現;所以例如你沒有方法體。想象一下編譯器讓你激活界面,當你調用沒有body的方法時會發生什麼?

至少你需要一個空的類,形式爲DemoService:IDemoService,比你得到一個參考。

希望它有幫助。

相關問題