Avatar billede sovsekoder Nybegynder
12. august 2004 - 22:59 Der er 7 kommentarer og
1 løsning

late binding

jeg er interesseret i at lave en late-binding til en komponent jeg først har informationer omkring runtime. Informationerne er gemt i en fil og hentes runtime.

På nuværende tidspunkt er problemet løst ved at gemme et filnavn, og derefter loade filen og bruge den vha. reflection. MEN er der en anden møde at gøre dette på ?

alle forslag er velkomne, sålænge at de nødvendige informationer for at lave late-bindingen kan gemmes i en fil.
Avatar billede arne_v Ekspert
12. august 2004 - 23:07 #1
Du kunne undgå en masse reflection hvis alle klasser implementerede det samme
interface, men det har du sikkert tænkt på.
Avatar billede snepnet Nybegynder
13. august 2004 - 00:11 #2
Jeg er enig med arne, og du kan lige få et lille eksempel her, hvis det skulle være relevant.

// et interface
public interface ISomething
{
    string GiveMeSomething();
}

interfacet er så implementeret på en klasse i en given assembly, og du "peger så på den i en konfigurationsfil" :

<add key="AssemblyName"    value="SomeAssembly" />
<add key="Namespace" value="Some.Namespace" />
<add key="Class" value="SomeClass" />

// du kunne så have noget i stil med nedenstående i en factory-klasse :
// Config er så bare der hvor du suger din konfiguration
public static ISomething CreateSomething()
{
    return (ISomething)CreateObject(Config.Namespace, Config.AssemblyName, Config.Class);
}

Et eller andet sted hvor du har lyst til at bruge den :

ISomething something = Factory.CreateSomething();
string text = something.GiveMeSomething();
Avatar billede sovsekoder Nybegynder
13. august 2004 - 08:52 #3
det var lige præcis det jeg skulle bruge snepnet! jeg giver point.
Avatar billede snepnet Nybegynder
13. august 2004 - 09:14 #4
Jamen det var da herligt :o)
Avatar billede sovsekoder Nybegynder
13. august 2004 - 10:02 #5
nu var jeg vist for hurtig i vendingen. CreateObject er til en C# server app (http), hvor mit program er et windows program (kender ikke det korrekte udtryk :-o).

Det ser ud til at min oprindelige løsning med:

System.Reflection.Assembly.LoadFrom( addInName )
assembly.GetTypes();
find interface.. lav object med CreateInstance osvosv.
Avatar billede sovsekoder Nybegynder
13. august 2004 - 10:03 #6
..at den løsning er måden at gøre det på... (?!)
Avatar billede snepnet Nybegynder
13. august 2004 - 10:54 #7
Ups.... manglede lige at give dig noget.

// denne her fra før :
public static ISomething CreateSomething()
{
    return (ISomething)CreateObject(Config.Namespace, Config.AssemblyName, Config.Class);
}

// kan så bruge denne her :
public static object CreateObject(string nameSpace, string assemblyPath, string className)
{
    return Assembly.Load(assemblyPath).CreateInstance(nameSpace + "." + className);
}

Tilsammen skulle det så gerne kunne gå op i en højere enhed :o)
Avatar billede sovsekoder Nybegynder
14. august 2004 - 12:18 #8
ja
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