|
| Dynamically load an assembly and invoke a method |
|
|
|
|
| Messages |
|
Related Types |
This message was discovered on microsoft.public.dotnet.languages.csharp.
Responses highlighted in red are from those people who are likely to be able to contribute good, authoratitive information to this discussion. They include Microsoft employees, MVP's and others who IMHO contribute well to these kinds of discussions.
| Martin Maat |
Hi,
I am trying to create a plug-in assembly without the need to register it in the GAC. Reflection should help me out here. I got this far:
private void button1_Click(object sender, System.EventArgs e) { Assembly engine = null; AssemblyName assemblyName = new AssemblyName(); assemblyName.CodeBase = assemblyPath + @"Engine.dll"; engine = Assembly.Load(assemblyName); Type[] types = engine.GetTypes(); foreach (Type type in types) { if ((type.FullName == "Engine.Responder") & (type.IsClass)) { ConstructorInfo ci = type.GetConstructor(Type.EmptyTypes); object responder = ci.Invoke(null); MethodInfo mi = type.GetMethod("ReplyToMessage"); object[] parameters = new object[2]; string msg = "Pipo de Clown"; string reply = null; parameters[0] = msg; parameters[1] = reply; string returnValue = (string)mi.Invoke(responder, parameters); txtMonitor.AppendText("reply = " + reply); } } }
This is the loaded assembly's method I invoke:
public string ReplyToMessage(string msg, out string reply) { reply = "This is my reply."; return reply; }
I am doing something right because I do get all the types in the external assembly and passing either 1 or 3 parameters throws an exception telling me the number of parameters is wrong. With a parameter array of two strings passed in it "succeeds" but the external method's code is never visited. What is wrong?
Martin.
|
|
|
| |
|
| |
| | |
|
|
|
|
|
|
|
BootFX
Reliable and powerful .NET application framework. |
|
|
|
|
|
|