Newsgroup: it.comp.lang.visual-basic
Titolo: registrazioni COM con riferimenti circolari

Sto sviluppando un'applicazione con componenti dll e exe;
Problema:
se il componente1 usa componente2,
 il componente2 usa componente3
e il componente3 usa componente1,
come si registrano senza incorrere in errori durante l'esecuzione?
Cioč: se compilo il componente1, componente3,componente2 e poi ricompilo
il componente1
mi da MISSING sul reference del 3.
Se non ricompilo il comp 1 non va lo stesso (a runtime :can't create
activex object)
Come posso fare?

...

Evidenti problemi di design dei componenti...
Trova un'altra soluzione per il design, per evitare riferimenti circolari.
Sorry, non credo ci sia altra soluzione.
--
Roal Zanazzi
z...@iol.it

Sorry, non credo ci sia altra soluzione.
L'unico tentativo che si puo' provare per evitare di rifare tutto (ma ha ragione
Roal, ci deve essere un modo piu' 'pulito' per strutturare i componenti) e'
quella di non usare nel componente3 i riferimenti al componente1 ma lavorare con
l'associazione tardiva (variabili 'As Object' e 'CreateObject' al posto di 'New
xxx')
Ciao.
--
Luca Dormio
l...@sig-la.com
ldo...@tin.it

il probema č questo:
Ho n componenti, supponi per es.n agenzie.
Supponi che una agenzia debba chiedere informazioni ad un altra.
Per evitare che ogni agenzia abbia un riferimento verso tutte le altre mi sarebbe
utile un repository che detiene tutti i rferimenti alle agenzie, cosě quando una
agenzia vuole il riferimento ad un altra lo chiede al repository che lo ritorna.
Ora considerando che ogni agenzia deve avere il riferimento al repository e che il
repository deve avere un riferimento ad ogni agenzia...ecco il problema!
Che soluzioni mi consigliate per non costringere ogni componente ad avere i
riferimenti verso gli n fratelli?
Grazie.
Stefano.



Ossia devi fare una specie di grafo in cui le agenzie sono gli elementi...
Da quanto scrivi sembra che il grafo e' definito a priori (Agenzia1 ha un
riferimento ad Agenzia2, etc... fisso, che non cambia, es. Agenzia1 non puo'
chiedere info ad Agenzia3, ma sempre e solo ad Agenzia2).
Beh, in questo caso direi che va bene il suggerimento di Luca Dormio, ossia
usa il late-binding:
in Agenzia1 definisci il riferimento ad Agenzia2 come Object, invece che
come clsAgenzia2...
In questo modo puoi compilare senza avere riferimenti ad altre agenzie
(credo).
Comunque non mi e' ben chiaro il problema... se sono tutte agenzie, sono
tutti oggetti della stessa classe, quindi il riferimento e' a se stessa....
mah
Oppure sono agenzie diverse, ma con una base comune, e allora sarebbe meglio
(benedetta OOP) avere una classe astratta di base Agenzia e derivare le
classi AgenziaDerivata1,2,3... Cosi' dovresti avere nell'Agenzia (base) un
riferimento a se stessa (che in realta' a runtime sara' un oggetto di classe
derivata)... ma forse sto chiedendo troppo a VB?!
Oppure sono agenzie di tipo TOTALMENTE differente?
Allora sei costretto a usare il late-binding (Object)
Non so... non riesco a capire bene la struttura dell'applicativo.
--
Roal Zanazzi
z...@iol.it

Ho risolto il problema con la tua soluzione  poco prima di leggerla. Ho definito
una classe astratta, ho implementato ogni componentre con Implemets
e...(benedetta OOP), funziona!!
Ciao, e grazie a tutti!
