Plugin System Probleme (C#)

OnkelBeBu

Grünschnabel
HI,

ich hab eine kleine Anwendung die ich nun mit plugins erweitern möchte.
Dafür hab ich folgendes interface implementiert:

PHP:
namespace SolMander
{
	public interface ISolManPlugin
	{

		String GetName();

		String GetVersion();

	};
}
ist natürlich nur das Grundgerüst, aber fürs prinzipielle Testen sollte es reichen.
Das interface ist der Hauptanwendung auch bekannt.

Jetzt hab ich ein neus C# Klassenbibliothek Projekt gemacht, in der nur eine Klasse ist, die eben jenes Interface implementiert.

Wenn ich jetzt die Hauptanwendung starte, lade ich so die dll:
PHP:
				Assembly pluginDll = Assembly.LoadFile(fileName);

				Type[] pluginTypes = pluginDll.GetTypes();
				foreach (Type pluginType in pluginTypes)
				{					
					Type[] iFaces = pluginType.GetInterfaces();
					try
					{						
						object obj = pluginDll.CreateInstance(pluginType.FullName);						
						ISolManPlugin plugin = (ISolManPlugin)obj;
						MessageBox.Show("Loaded : " + pluginType.Name);
					}
					catch (Exception)
					{
					}
				}
Mein Problem ist nun, dass der Cast schief geht mit der exception:
Das Objekt des Typs PluginTest.Plugin kann nicht in Typ Mainapp.ISolManPlugin umgewandelt werden.
Das iFaces Array hab ich zu Debugging zwecken eingeführt, dort wird auch das Interface gelistet, aber es geht halt trotzdem nicht :D

Die dll ist NICHT als Verweis aufgeführt und jedes Projekt enthält die komplett selbe Interface definition.
Vielleicht kann mir einer helfen :confused:
 
Hi!

Das Interface muss aus ein und der selben Assembly stammen. Diese kannst auch kopieren, Hauptsache sie sind vollkommen gleich. Das Framework validiert den kompletten Assembly-Namen samt Namespace. Wenn irgend was nicht passt, kannst nicht casten.
 
Ja Danke das hat geholfen!

ich hab das nun so gemacht:

eine DLL PlugInInterfaces die nur interfaces enthält.
und die als Verweis zu der Hauptapplikation und dem Plugin Hinzugefügt.
Damit läufts!
 
Zurück