hallo,
ich hab mit c# (sdk v2.0) ein interface gemacht das als plugin schnittstelle dient und mittels reflection kann ich das ganze auch zur laufzeit laden. dabei überprüfe ich ob die klassen mein interface implementieren, public ist, usw...
das funktioniert eh ohne probleme.
nun möchte ich aber dass mein interface ein generic interface ist. aber da lässt mich die funktion "GetInterface(string)" hängen. laut msdn kann die funktion nicht mit generic interfaces arbeiten:
ZitatThe name parameter cannot include type arguments. For example, the C# code GetInterface("MyInterface<int>") searches for an interface with the text name "MyInterface<int>", rather than for an interface named MyInterface that has one generic argument of type int.
hat wer a lösung wie ich aber trotzdem zb nach "IPlugIn<int>" "filtern" kann?
hier noch mal mein code für das einfache interface:
private int LoadPlugIns(string path)
{
string[] p = Directory.GetFiles(path, "*.dll");
foreach (string s in p)
{
Assembly asm = Assembly.LoadFrom(s);
foreach (Type t in asm.GetTypes())
{
if ((t.GetInterface("PlugInSDK.IPlugIn") != null) &&
(t.IsPublic) && (t.IsMarshalByRef))
{
ListViewItem lvi = new ListViewItem(s);
lvi.SubItems.Add(t.Name);
lvi.SubItems.Add(t.ToString());
this.listView1.Items.Add(lvi);
IPlugIn pl = Activator.CreateInstance(t) as IPlugIn;
this.pluginList_.Add(pl);
}
}
}
return 0;
}
Alles anzeigen
von GetInterfaces() bekomm ich eine liste der interfaces, wenn da ein generic interface dabei ist heißt die dann zb: "IPlugIn`1" aber dieser string bringt bei GetInterface trotzdem NULL.
vllt hat wer an tip für mich!
danke, seHaas