on Oct 30th, 2008C# – Anropa metoder dynamiskt
Jag har tidigare skrivit ett REST-API i PHP, som jag nu av ett antal orsaker var tvungen att porta till C#, och kom på att jag faktiskt inte skrivit särskillt mycket om C# än.
I PHP använder jag Reflection-api:t för att anropa metoder dynamiskt, ungefär enligt http://rest.host.com/klass/method/parametrar. Jag googlade efter olika lösningar folk använder för att anropa methoder dynamiskt i C#, men fann inget som jag tyckte såg bra ut.
Min slutgiltiga lösning blev att använda Type-klassen samt GetType()-methoden i samma klass. Exempel på användning, utan felhantering m.m:
{
protected void Page_Load(object sender, EventArgs e)
{
String szClass = Request.QueryString["class"];
String szMethod = Request.QueryString["method"];
String szParam = Request.QueryString["param"];
object[] parameters = { szParam };
Invoke(szClass, szMethod, parameters);
}
public void Invoke(String szClass, String szMethod, object[] parameters)
{
Type type = Type.GetType(szClass);
type.InvokeMember(szMethod, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Static, null, null, parameters);
}
}
public class Printer
{
public static void Print(String sz)
{
HttpContext.Current.Response.Write(sz);
}
}