Op dit moment is mijn project zo goed als af.
Ik wil echter de mogelijkheden voor gebruik nog vergroten door eventueel COM-interop mogelijk te maken.
Het project zit ongeveer zo in elkaar:
1) Ik maak sterk gebruik van dependency injection. Tijdens de start van het programma worden alle plugins dynamisch geladen. Al deze plugins voldoen aan vaste interfaces. Deze interfaces zitten in 1 assembly.
2) Ik heb 1 klasse (met interface) die all benodigde functionaliteit ter gebruik aanbiedt.
3) Er is een COM-object dat doorheen het programma gebruikt wordt.
een kort codevoorbeeldje:
nu wil ik hebben dat Klasse1 een wrapper (RCW) kan zijn voor een COM-object.
Daarom moet IServices (of ook Services??) COMVisible gemaakt worden.
De vraag is nu: als alle klassen die IServices aanbiedt een overeenkomstige interface hebben die COMVisible is, is het dan voldoende dat ik de interfaces COMVisble meegeef?
Ik weet dat COM werkt met interfaces (en interfacepointers) maar ik ben op dit project liever safe than sorry...
Ik heb bovendien al gevonden dat je voor COM altijd een default-contstructor nodig hebt, dus het doorgeven van IServices zou dan via een property moeten natuurlijk.
Ik wil echter de mogelijkheden voor gebruik nog vergroten door eventueel COM-interop mogelijk te maken.
Het project zit ongeveer zo in elkaar:
1) Ik maak sterk gebruik van dependency injection. Tijdens de start van het programma worden alle plugins dynamisch geladen. Al deze plugins voldoen aan vaste interfaces. Deze interfaces zitten in 1 assembly.
2) Ik heb 1 klasse (met interface) die all benodigde functionaliteit ter gebruik aanbiedt.
3) Er is een COM-object dat doorheen het programma gebruikt wordt.
een kort codevoorbeeldje:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| // --------------------------------- Interfaces.dll #using COMcomponent interface IKlasse 1 {...} interface IKlasse 2 {...} interface IServices { IKlasse1 EenFunctie(); COMcomponent.comp Component { get; } IKlasse2 Klasse2 { get; } } //--------------------------------- Programma.exe #using COMcomponent #using interfaces class Services : IServices { Services() { /*... laad klasse1 en klasse2 dynamisch uit assemblies en laad COMcomponent*/} private IKlasse1 klasse1; private IKlasse2 klasse2; private COMcomponent.comp component; IKlasse1 EenFunctie() { return klasse1; } COMcomponent.comp Component { get { return component; } } IKlasse2 Klasse2 { get { return klasse2; } } } //---------------------------------- Plugin.dll #using interfaces class Klasse1 : IKlasse1 { private IServices services; Klasse1(IServices services) { this.services = services; } } |
nu wil ik hebben dat Klasse1 een wrapper (RCW) kan zijn voor een COM-object.
Daarom moet IServices (of ook Services??) COMVisible gemaakt worden.
De vraag is nu: als alle klassen die IServices aanbiedt een overeenkomstige interface hebben die COMVisible is, is het dan voldoende dat ik de interfaces COMVisble meegeef?
Ik weet dat COM werkt met interfaces (en interfacepointers) maar ik ben op dit project liever safe than sorry...
Ik heb bovendien al gevonden dat je voor COM altijd een default-contstructor nodig hebt, dus het doorgeven van IServices zou dan via een property moeten natuurlijk.
ASSUME makes an ASS out of U and ME