1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

generic interface als plugin-schnittstelle

  • seHaas
  • 31. Juli 2005 um 23:11
  • Unerledigt
  • seHaas
    11
    seHaas
    Mitglied
    Reaktionen
    3
    Punkte
    1.238
    Beiträge
    206
    • 31. Juli 2005 um 23:11
    • #1

    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:

    Zitat

    The 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:

    Code
    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

  • EvilGuyMischa
    9
    EvilGuyMischa
    Mitglied
    Reaktionen
    1
    Punkte
    721
    Beiträge
    140
    • 31. Juli 2005 um 23:55
    • #2

    schon mal mit

    HasGenericArguments
    GetGenericArguments ()
    GetGenericTypeDefinition()

    versucht?

    siehe auch http://msdn.microsoft.com/library/defaul…rp_generics.asp

    sollte eigentlich mit dem Type in .NET 2.0 klappen, sofern man der msdn vertraut.

    sag mir bescheid obs damit klappt. würd mich interessieren

    "28 days, 6 hours, 42 minutes, 12 seconds - that is when the world will end."
    [Frank, the bunny | Donnie Darko]http://mischa.outsrc.com/

  • seHaas
    11
    seHaas
    Mitglied
    Reaktionen
    3
    Punkte
    1.238
    Beiträge
    206
    • 1. August 2005 um 12:56
    • #3
    Zitat von EvilGuyMischa

    schon mal mit

    HasGenericArguments
    GetGenericArguments ()
    GetGenericTypeDefinition()

    versucht?

    siehe auch http://msdn.microsoft.com/library/defaul…rp_generics.asp

    sollte eigentlich mit dem Type in .NET 2.0 klappen, sofern man der msdn vertraut.

    sag mir bescheid obs damit klappt. würd mich interessieren

    Alles anzeigen


    nein hab ich noch nicht!

    ich habs momentan so gemacht:

    Code
    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())
    		{
    [b] 			bool found = false;
    			List<Type> l = new List<Type>(t.GetInterfaces());
    
    
     			found=(l.IndexOf(typeof(IPlugIn<int>))!=-1);
    [/b]  
    			if ((found) && (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<int> pl = Activator.CreateInstance(t) as IPlugIn<int>;
    				this.pluginList_.Add(pl);
    			}
    		}
    	}
    	return 0;
    Alles anzeigen

    aber ich glaub das ist nicht die schönste art und weise.

    mfg seHaas

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern