My client sends a pre-formatted string with the method to call and the parameters, my server processes the string and calls the correct method.
But how it can be?
I omitted that part... voluntarily. :) Let's see it!
We have this class "CM" with 1 method and 1 static method.
public class CM
{
//Dummy method
public Boolean RetrieveInfo(int _par1, Guid _par2)
{
return _par2.ToString().Contains(_par1.ToString());
}
//Dummy static method
public static string[] RetrieveInfoStatic(string _par1, bool _par2)
{
return new string[] { _par1, _par2.ToString() };
}
}
Then we have our program with a test method called Example. Guess what message will be printed to Console? :)
public void Example()
{
Object o1 = DynamicInvokeofStatic();
Object o2 = DynamicInvokeofNonStatic(new CM());
if (o1 is String[])
Console.WriteLine("o1 is Ok");
if (o2 is Boolean)
Console.WriteLine("o2 is Ok");
}
public object DynamicInvokeofStatic()
{
try
{
//Same things
Type desiredType = typeof(CM);
String methodName = "RetrieveInfoStatic";
object[] parameters = new object[] { "ALL", true };
//I use a instance of a Reflection class to invoke my static method
MethodInfo mInfo = desiredType.GetMethod(methodName);
return mInfo.Invoke(this, parameters);
}
catch (Exception ex)
{
return null;
}
}
public object DynamicInvokeofNonStatic(CM instance)
{
try
{
/* //I could load my type from a DLL
* Assembly assembly = Assembly.LoadFrom("MyLib.dll");
* //Create a dummy instance
* object myObject = Activator.CreateInstance(desiredType); */
Type desiredType = typeof(CM); //Retrieve the type from my Class
String methodName = "RetrieveInfo"; //Set my Method to call
object[] parameters = new object[] { 0, Guid.NewGuid() }; //Create my parameters array
//Invoke
MethodInfo mInfo = desiredType.GetMethod(methodName);
return mInfo.Invoke(instance, parameters);
}
catch (Exception ex) //See TargetException
{
return null;
}
}
And that's all folks!
This is my (very) first post in english and I excuse myself in advance for errors. I hope this post be useful for somebody.
Goodnight.
No comments:
Post a Comment