Avatar billede brian0905 Nybegynder
19. juni 2003 - 18:00 Der er 1 kommentar og
1 løsning

Program med egne plugins

Jeg fortsætter med at kode mit program der skal kunne loade egne plugins og bruge disse. Planen er at der kommer til at eksistere et bibliotek under systemet der hedder plugins denne indeholder så alle mine dll'er. Jeg har nu følgende spørgsmål: Når jeg definerer et interface i mit system, så lavede den første gang jeg compilerede en interface.dll fil denne har jeg så fjernet men den bliver aldrig genereret igen, hvad sker der? Når jeg laver andre plugins der implementerer dette interface og smider dem i det dertil indrettede directory så kan jeg godt se dem og hente deres navn loade dem og hente deres type. Når jeg prøver at caste dem til mit interface så får jeg en cast exception, også selvom de ser ud til at indeholde samme interface. Kan dette problem have noget med det foregående at gøre. I bund og grund vil jeg bare gerne kunne bruge de metoder jeg finder i mine loadede dll'er. Eventuelt smide dem i en ArrayList til senere brug, hvordan gør man nemmest det, er det så en ArrayList af Type eller hva? Nedenstående er min kode:

Metode til at loade:
public void LoadTypes()
        {
            ArrayList types=new ArrayList();
            string currentDirectory = System.IO.Directory.GetCurrentDirectory();
            string [] dllFilenames = System.IO.Directory.GetFiles(currentDirectory, "*.dll");
   
            foreach(string filename in dllFilenames)
            {
                try
                {
                    Assembly asm = Assembly.LoadFrom(filename);

                    Type [] typesInAssembly = asm.GetTypes();
                    foreach(Type type in typesInAssembly)
                    {       
                        if(null != type.GetInterface(typeof(PlugIn2.IPlugin).FullName))
                        {
                            // We found a type, load it
                            Console.WriteLine(string.Format("Assembly: {0} has a type {1} that " +
                                "implements IPlugIn",
                                asm.FullName, type.FullName));
                            Console.WriteLine("Dette er typen "+type.FullName);
                            PlugIn2.IPlugin myPlugin=(PlugIn2.IPlugin)Activator.
//                            types.Add(type);
                        }
                    }
                }
                catch(BadImageFormatException e)
                {
                    // Not a valid assembly, move on
                }
            }

Mit interface:
using System;

namespace PlugIn2
{
    /// <summary>
    /// Generic plugin interface
    /// </summary>
    public interface IPlugin
    {
        string getName();
        string getDescription();
    }
}

Mit plugin:
using System;
using PlugIn2;
namespace DynamicFourth
{
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class PlugInFire : PlugIn2.IPlugin
    {
        private string m_strName;
       
        public PlugInFire()
        {
            m_strName = "hello I'm " + ToString();
        }
       
        public string getName()
        {
            return "test4";
        }
       
        public string getDescription()
        {
            return "description4";
        }   
   
       

    }
}
Avatar billede brian0905 Nybegynder
23. juni 2003 - 13:57 #1
har selv fundet ud af det...
Avatar billede knaldeglad Nybegynder
22. april 2006 - 16:34 #2
og hvad fandt du ud af ? :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester