2013-06-12 62 views
0

我在這裏有一個很奇怪的問題。由於反思,我正在將課程指向我的模擬課程,而不是「真正的」課程。 (測試目的)。我想知道是否有任何方法在模擬任何方法調用中捕獲,並根據調用等待的情況返回任何我想要的。從調用者創建方法/回答方法

某種:

調用另一個目的是做X(),並期望一個布爾值的對象。因爲我已經改變了它所指向的對象,所以當我調用X()(儘管它沒有實現X()自己)時,我希望我的模擬返回「true」。

換句話說,不是發射一個「MethodNotFoundException」,而是接收一切並相應地執行一些邏輯。再次

DynamicObject.TryInvoke方法

http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.tryinvoke.aspx

感謝:

+0

你可以尋找到一個依賴注入(DI),如[Ninject(HTTP框架:// WWW .ninject.org /)將解決這類問題。 – Jay

+0

對於MethodNotFoundException,你不能做一個捕獲嗎?您期待在某些情況下會發生這種情況,您可以在其中包含您的自定義邏輯。 – Mez

+1

我認爲你在這裏的語言是錯誤的... – millimoose

回答

0

由於@millimoose,最好的方法(和相當容易的)是!

0

也許,你得到的例外是MissingMethodException。 也許下面的控制檯應用程序可以指導你走向一個更具體的實施,但邏輯應該是相同的:

class Program 
{ 
    /// <summary> 
    /// a dictionary for holding the desired return values 
    /// </summary> 
    static Dictionary<string, object> _testReturnValues = new Dictionary<string, object>(); 

    static void Main(string[] args) 
    { 
     // adding the test return for method X 
     _testReturnValues.Add("X", true); 

     var result = ExecuteMethod(typeof(MyClass), "X"); 
     Console.WriteLine(result); 
    } 

    static object ExecuteMethod(Type type, string methodName) 
    { 
     try 
     { 
      return type.InvokeMember(methodName, BindingFlags.InvokeMethod, null, null, null); 
     } 
     catch (MissingMethodException e) 
     { 
      // getting the test value if the method is missing 
      return _testReturnValues[methodName]; 
     } 
    } 
} 

class MyClass 
{ 
    //public static string X() 
    //{ 
    // return "Sample return"; 
    //} 
}