2016-06-14 10 views
0

Ich habe einen Web-Service namens 'A'.Call-Funktionen Dynamik von DLLs in einem Web-Service C#

Auf dieser WS möchte ich nur bleiben, um den installierten Ordner zu suchen, mit anderen Worten, zusammen DLL-Datei.

In diesem Verzeichnis plane ich, "Module" meines Projekts zu setzen und die Funktionen (Operation Contracts) mit meinem WS zu teilen.

Zum Beispiel:

ModuleOne.dll die Funktion haben:

string[] getUsersFromDatabase(); 

MyService.dll die Funktion haben:

object CallEventByName(string eventName, params string parameters); 

Und ich stelle mir die Verwendung:

foreach string file in fileList 
// Check if DLL file have the function equal to 'eventName', 
// call the function passing your parameters if have 

Wenn ich das erstelle Suchfunktion SOAP, geben Sie den Funktionsnamen und die Parameter an. Mein WS benötigt die Intelligenz, um diese Anforderung zu verwalten und die "Rückkehr" zurückzugeben haha.

Wer kann ich dazu?

+0

Verwenden Reflexion der DLL-Funktionen aus dem WS-Code aufzurufen. – anmarti

Antwort

0

So etwas wie dies, kann es ein Problem sein, wenn DLL, die Sie Abhängigkeiten zu ladende hat, dann haben Sie laden auch diese dll

object CallFunction(string[] fileList , string eventName , object[] parameters){ 
     foreach(var file in fileList) 
     { 
      Assembly assem = Assembly.LoadFrom(file); 
      foreach(var t in assem.GetTypes()) 
      { 
       var methodInfo = t.GetMethod(eventName); 
       if(methodInfo != null) 
       { 
        var obj = Activator.CreateInstance(t); 
        return methodInfo.Invoke(obj , parameters); 
       }  
      } 
     } 

     return null; 
    } 
+0

Wie kann ich eine Assembly mit Ihren Abhängigkeiten laden? – jsfelipearaujo