2012-09-10 38 views
1

我有一個問題,試圖動態調用我的課程。這是我的示例代碼:如何動態調用一個類並使用它的函數?

類:

namespace TestUseCase 
{ 
    public class UseCase11 
    { 
     public UseCase11() 
     { 
     } 

     public string init() 
     { 
      return "aa.aspx"; 
     } 
    } 
} 

方法調用類:

private void dynamicExecution(string ClassName, string FunctionName) 
{ 
    System.Reflection.Assembly assembly = System.Reflection.Assembly.GetEntryAssembly(); 
    Object[] para = new Object[1]; 
    para[0] = null; 
    object dynMyClass = assembly.CreateInstance(ClassName); 
    dynMyClass.GetType().GetMethod(FunctionName).Invoke(dynMyClass, para); 
} 

用法:

dynamicExecution("TestUseCase.UseCase11", "init"); 

不幸的是,結果總是null。我該如何解決這個問題?

+0

嘗試,在你的dynamicExecution方法中:'assembly.GetTypes()。where(m => m.Name ==「UseCase11」)。Select(x => x.FullName).FirstOrDefault();'看看是否你在正確的程序集中,並寫出正確的類型全名。 –

+0

plz幫我關於你的代碼,我在這裏添加了這段代碼,而你的代碼中的whate是WHERE?!! –

+0

把它放在你的dynamicExecution方法中(用'var test = ;')。我沒有得到任何測試結果,這是一個組裝問題。如果您有結果,請參閱測試的值。 –

回答

0

確保您試圖實例化的類在正確的程序集中聲明。在你的例子中,你正在使用Assembly.GetEntryAssembly(),但是這是正確的程序集?如果班級在與您顯示的代碼相同的程序集中定義,則還可以使用Assembly.GetExecutingAssembly()

+0

我想讓我的類動態調用,而我的類不是dll或其他文件,但我搜索這個主題,大家都用這種方式來調用類和函數!我將代碼更改爲您的答案,但「dynMyClass」爲null :( –

+0

)在哪個程序集中定義了UseCase11類?您需要加載此程序集。我不明白您的意思,我希望我的類動態地調用和我的類不dll或其他文件 –

+0

我有幾個類app_code文件夾中,我想獲得2參數(類名稱,方法名稱)和使用類和方法(動態調用) –

相關問題