Applicazione a moduli

martedì 03 maggio 2011 - 12.15

pedro8a Profilo | Junior Member

Ciao a tutti,
mi piacerebbe creare la mia applicazione a moduli.
Cercando ho letto che è possibile e ho anche trovato un esempio.
In pratica le applicazioni satellite, che sono visibili nell'IDE, vengono compilate come dll.
Se in una cartella specifica ci sono queste dll, il programma le carica.
Ora vorrei partire da 0.
Allora ho creato un nuovo progetto. Ma non riesco ad aggiungerne nuovi.

Ma come diavolo si fà?

StefanoRicci Profilo | Junior Member

ma tu vuoi sapere come avere più progetti in una sola soluzione?

tipo come qui


271x210 17Kb


o come compilare le dll della soluzione in uno specifico path?
--------------------------------------

IDE: Visual Studio 2008 Professional Edition
IDE: Visual Studio 2010 Express

pedro8a Profilo | Junior Member

si, nella soluzione si vedono più progetti indipendenti.
Tra di loro comunicano, nel senso che posso aprire un form di un altro progetto e passargli valori

sansi Profilo | Newbie

>si, nella soluzione si vedono più progetti indipendenti.
>Tra di loro comunicano, nel senso che posso aprire un form di
>un altro progetto e passargli valori

Per aggiungere un progetto a una soluzione usa il comando File-->Aggiungi e poi scegli se è un nuovo progetto o uno esistente.

Nel tuo caso se vuoi aggiungere una nuova libreria DLL sceglierai poi libreria di classi.

Dal progetto di avvio poi dovrai aggiungere il riferimento al progetto nuovo con la solita procedura progetto-->aggiungi riferimento
e creare le istanze della classe presente nella libreria prima di usarla. Per esempio se il nuovo progetto si chiama libreria e contiene il form frmProva dal progetto di base dovrai aggiungere l'istruzione

Dim frmPippo as new libreria.frmProva

prima di poter usare il form contenuto nella libreria.

Spero di essere stato chiaro e di aver capito correttamente la tua domanda.

Massimo

StefanoRicci Profilo | Junior Member

>si, nella soluzione si vedono più progetti indipendenti.

quindi vuoi aggiungere semplicemente un progetto dll alla soluzione

basta che selezioni la tua soluzione, fai click DX sopra, fai aggiungi nuovo/esistente progetto (dipende se hai già codice o meno)... e a questo punto lo vedi in elenco

ora vai sul progetto che deve chiamare quello che hai inserito ora, vai su riferimenti, click dx, e fai aggiungi riferimento, quindi seleziona il tab progetti, ed inserisci quello che ti serve

quindi dal codice sorgente basta che fai using namespace_che_vuoi

>Tra di loro comunicano, nel senso che posso aprire un form di
>un altro progetto e passargli valori

questo è normale, niente di strano, se sono dll, basta che importi il namespace e vedi tutte le interfacce disponibili

--------------------------------------

IDE: Visual Studio 2008 Professional Edition
IDE: Visual Studio 2010 Express

kataklisma Profilo | Senior Member

>Ciao a tutti,

Ciao!

>Se in una cartella specifica ci sono queste dll, il programma
>le carica.

Ragazzi, penso che lui non si sia spiegato bene, non vuole semplicemente aggiungere progetti alla solution, o meglio lui crede che facendo cosi potrà modularizzare il software.

Mi spiace ma non è cosi semplice, come sei messo a :

(Caso semplice)
1) Architettura Plug-In,
2) Utilizzo di Interfacce,
3) Gestione dinamica di librerie,
4) Reflection.

(Caso complesso)
1) Tutti i punti del caso semplice,
2) Compilazione a runtime di Script

???

>Ma come diavolo si fà?
Vedi i punti elencati sopra, ti conviene dare una bella lettura :)
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

pedro8a Profilo | Junior Member

penso tu abbia capito...

Allora sono arrivato a questo punto:

ora la mia soluzione ha 2 progetti test1 e test 2.

Quello che voglio è che test 2 diventi dipendente da test1. Nel senso di poter lanciare da test1 i form di test2.
Da test2 devo poter vedere le variabili pubbliche dei due progetti.

kataklisma Profilo | Senior Member

>penso tu abbia capito...
;)

>Allora sono arrivato a questo punto:
>
>ora la mia soluzione ha 2 progetti test1 e test 2.
>
>Quello che voglio è che test 2 diventi dipendente da test1. Nel
>senso di poter lanciare da test1 i form di test2.
>Da test2 devo poter vedere le variabili pubbliche dei due progetti.

Per fare questo, come ti era gia stato riferito, vai in Test1, espandi il progetto, ci sarà una sezione "References" o "Riferimenti" :

1) Clicca con il testo destro
2) Premi "Aggiungi Riferimento",
3) Seleziona il Tab "Projects" o "Progetti",
4) Seleziona Test2

Ora hai referenziato Test2 in Test1 e puoi utilizzarne le classi con la sintassi Test2.TuaClasse.TuoMetodo().

Attento! Come ti dicevo prima, questo è totalmente inutile se vuoi sviluppare un'applicativo con architettura Plug-in in quanto stai referenziando una dll all'interno del progetto e a Runtime l'applicativo cercherà la Dll (in questo caso Test2.dll) provocando il crash in caso di dll mancante.

L'unico modo possibile per fare ciò che vuoi è pubblicare delle interfacce che le varie dll "satellite" devono implementare, ciò ti permetterà di poter caricare gli assembly a runtime tramite reflection e di utilizzarne i metodi (che non sono altro che i metodi che l'interfaccia fa implementare).

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

pedro8a Profilo | Junior Member

bene!
a me piacerebbe la seconda soluzione.
Ho trovato un esempio. Se mai posto il codice e ne parliamo?

kataklisma Profilo | Senior Member

>bene!
>a me piacerebbe la seconda soluzione.
>Ho trovato un esempio. Se mai posto il codice e ne parliamo?

Non postarlo, altrimenti riempiamo la pagina di codice riporta pure il Link ;)

------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

pedro8a Profilo | Junior Member

http://community.visual-basic.it/lucianob/articles/17236.aspx

utente Profilo | Junior Member

Fino a quì è tutto interessante ma vi faccio una domanda.
Come si può fare che i plug-in usino funzionalità del core?
In parole povere, se io sviluppo delle funzionalità (Esempio, stampa, email) e le voglio rendere pubbliche a tutti i moduli, cosa devo fare?

pedro8a Profilo | Junior Member

sono ancora in fase di studio...
ma tutte le procedure sono pubbliche.

pedro8a Profilo | Junior Member

http://community.visual-basic.it/lucianob/articles/17236.aspx

che ne pensi di questo progetto?
Lo hai guardato?

kataklisma Profilo | Senior Member

>http://community.visual-basic.it/lucianob/articles/17236.aspx
>
>che ne pensi di questo progetto?
>Lo hai guardato?

Ciao :) Scusa il ritardo ma, il lavoro a volte porta via davvero tanto tempo...comunque, tornando a noi, quel progetto è la concretizzazione dei punti specificati da me nel precedente post.

Fortuna vuole che sia anche di facile implementazione, ma tutto è relativo al progetto reale che si va a sviluppare.

Ritienila una buona base di partenza per poter studiare Attributi, Interfacce, reflection e quant'altro...incomincia a vedere un po di teoria OOP sulle Interface e vedrai che tutto ti sembrerà più chiaro.

Il livello di difficoltà inerente a reflection e attributi presenti nel link è un livello basso di facile comprensione che non pero non toglie l'onere di dare una bella lettura a qualche libro di testo.

Hai particolari difficoltà?Ti conviene postare domande specifiche altrimenti si scriverebbero solamente post kilometrici e complessi.

P.S dai un'occhiata anche qui : http://www.codeproject.com/KB/cs/c__plugin_architecture.aspx

e qui : http://www.codeproject.com/KB/cs/pluginsincsharp.aspx

P.S2 consiglio spassionato, fai di www.codeproject.com la tua bibbia (oltre a MSDN) ci sono veramente innumerevoli esempi e spiegazioni su tempi di qualsiasi natura e a qualsiasi livello.

Ciao :)
------------------------------------------
Ignazio Catanzaro

http://blogs.dotnethell.it/swdev/

pedro8a Profilo | Junior Member

grazie gentilisomo..
devo iniziare a studiare...

Puoi consigliarmi un bel libro, o pensi che on-line trovo quello che mi serve?

Cteniza Profilo | Guru

Ciao.
Puoi trovare quanto ti serve in qualche manuale approfondito di vb.net.
Io per sviluppare il mio esempio sui moduli ho attinto principalmente a msdn.
Si tratta di una miniera di informazioni spesso sotovalutata, quello che importa a mio avviso è principalmente imparare a fare delle ricerche e approfondire le risposte.
Un atteggiamento sbagliato è mettersi alla tastiera, trascinare qualche oggetto sulla form sapendo già in partenza che ci si dovrà fermare per questo, questo questo, vale la pena di documentarsi prima

pedro8a Profilo | Junior Member

seguirò sicuramente il tuo consiglio.
1) Intanto mi piacerebbe trogliere il listview e mettere i classici pulsanti
2) lavoro molto con le variabili pubbliche e mi piacerebbe fare anche questo.

Cteniza Profilo | Guru

Niente di più facile.
Ciascun bottone ha una proprietà "tag" che puoi utilizzare per definire il riferimento alla form che vuoi aprire (se si tratta di multiform).
Se si tratta invece di altri metodi verifica l'applicabilità come ad esempio il metodo con il nome.
Puoi definirti una tua classe esterna (una collection) che "restituisce" alcune proprietà indispensabili e fare riferimento a queste per "appendere" sul tag i tuoi oggetti da referenziare.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5