Avatar billede brian0905 Nybegynder
09. marts 2005 - 08:15 Der er 7 kommentarer og
1 løsning

Pluginbaseret arkitektur

Hejsa,

Jeg sidder og skal designe et nyt system. Jeg vil gerne lave det pluginbaseret. Hvordan gør man det i asp.net? Jeg vil samtidig gerne bevare performance osv.... jeg har en ide om at jeg skal implementere et bestemt interface i mine plugins (assemblies), men hvordan jeg når derfra til at jeg rent faktisk kan loade mine plugins synes jeg er langt.... nogle ideer eller praktiske erfaringer? Ideer til hvordan dette interface kan se ud? indtil videre har jeg forestillet mig noget i dur med at der returneres enten HTML eller XML som så renderes af stylesheets....

/Brian
Avatar billede burningice Nybegynder
09. marts 2005 - 16:15 #1
lad en klasse implementere et interface du har defineret i hovedprogrammet og brug Activator.CreateInstance-metoden til at oprette en instans af klassen.

IDitInterface = (IDitInterface)Activator.CreateInstance(
  "dinAssembly",
  "pluginKlasse,
  new object[] {}
);
Avatar billede brian0905 Nybegynder
09. marts 2005 - 19:52 #2
Vil jeg således ikke være nødt til at loade mit plugin hver gang siden loades?

Konkret vil jeg fx. gerne lave en side hvor jeg nemt og sikkert (uden om visual studio) kan tilføje eksempelvis et nyhedsplugin (eventuelt en ascx fil der viser nyheder) dette vil jeg gerne gøre runtime, og allerhelst kompileret ind i filen.... Jeg vil gerne starte ud med en xml fil der har nogle basale tags (title, header....) og så et eller flere tags der eksempelvis hedder: <component>news.ascx</component> det skal så være muligt at vælge mellem forskellige "plugins" til at placere i disse component tags, og så generere siden ud fra dette (i værste fald) eller loade komponenten dynamisk..... skal bruges i et simpelt CMS
Avatar billede burningice Nybegynder
09. marts 2005 - 21:14 #3
erm... ja, et plugin skal loades hver gang en side skal loades, ligesom ALLE andre dine objecter. Objecter bliver altid oprettet igen ved hvert request, så jeg kan ikke se hvad problemet skulle være?
Avatar billede burningice Nybegynder
09. marts 2005 - 21:16 #4
at gøre noget runtime, og samtidig snakke om at kompile det ind i dit program er to modsætninger... den sætning gør man faktisk i tvivl om hvad det er du egentlig vil, og det er et rigtigt plugin-system du vil lave, hvor alt kan skiftes ud som man har lyst, eller om man bare skal kunne vælge mellem en masse forudlavede komponenter når en side skal opbygges.
Avatar billede brian0905 Nybegynder
10. marts 2005 - 09:45 #5
hmm.... kan godt se dilemmaet. Konkret vil jeg bygge et simpelt CMS til en håndfuld sider jeg sidder og vedligeholder. Jeg vil gerne have muligheden for at i designfasen bygge en side og så indsætte en bestemt komponent på denne side (det er denne del der er pluginbaseret, altså de plugins jeg kan vælge mellem loades dynamisk hver gang jeg "går i design mode"). Når jeg så er færdig med at designe siden så gemmer jeg den som den skal se ud og den bliver nu kompileret ind i .dll filen (dette er kompilerings delen).....efter min bedste overbevisning er dette den "smarteste" måde at lave dette på (men ideer til forbedringer modtages gerne)
Avatar billede burningice Nybegynder
10. marts 2005 - 11:09 #6
hvis du kan vælge mellem en masse ascx'er er der ikke noget der skal compiles om bare fordi at du rykker rundt på dem på en aspx-side.

At vise i design mode hvordan en given ascx-control kommer til at se ud via er nok den sværeste del. Jeg går ud fra du gerne vil lave et system ala Visual Studio eller Webmatrix hvor man kan trække en control ind på siden og den så skal renderes så den ser ud som den vil gøre når en en bruger browser ind på hjemmesiden? Det kan jeg desværre ikke hjælpe dig med, og vil gå så langt og sige at det nok ikke kan lade sig gøre, da en ascx-control jo typisk indeholder kode der skal eksekveres før man ved hvilket html-output den giver.

Den nemmeste måde at specificere via et cms-system at "her vil jeg gerne have en control" lave dine egne tags som manså kan sættte ind. f.eks. skriver man [control:news], som så bliver parset om til et <ditTag:NewsControl id="newsControl1" runat="server" /> når at siden bliver gemt.
Avatar billede brian0905 Nybegynder
11. april 2005 - 08:43 #7
takker, tror jeg ved hvordan jeg vil gøre det nu.....
Jeg vælger ikke at rendere min kontrol for brugeren, men blot indsætte [control:news] i min kode. Skriv lige et svar
Avatar billede burningice Nybegynder
11. april 2005 - 09:26 #8
svar :)
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