Salve a tutti.
Stavo provando a creare un BIZ che si appoggia ad un DAL caricandolo "a runtime".
La prova che volevo fare è quella di vedere se il mio BIZ è realmente disaccoppiato dal DAL.
Per farlo, il BIZ carica il DAL a runtime usando la Reflection:
private IDalContext _dal;
private object sync = new object();
public IDalContext Dal
{
get
{
if (_dal.IsNull())
{
lock (sync)
{
if (_dal.IsNull())
{
_dal = ClassLoader.LoadClass(Configuration.DalAssemblyPath, Configuration.DalClassName) as IDalContext;
}
}
}
return _dal;
}
}
In pratica nel file di configurazione (app.config) imposto il percorso completo della DLL che implementa IDalContext e il nome completo della classe.
Tutto funziona quando mi appoggio ad un DAL che lavora con degli oggetti caricati da codice (il classico DAL di esempio che non accede ad alcun DB).
Nel momento in cui gli associo un DAL che accede al DB, mi esce con errore perchè non riesce a caricare le librerie a cui ho fatto riferimento nel DAL (ad esempio quelle specifiche per il DB).
Pensavo di aver strutturato bene le classi per essere disaccoppiato al massimo, però così facendo nel BIZ devo aggiungere il riferimento a tutte le librerie usate nel DAL (ma non mi va bene).
Quando carico un Assembly a runtime (come ho fatto sopra), come faccio a dirgli di caricarsi lui le proprie dipendenze? Nel mio caso specifico nella directory in cui si trova l'assembly del DAL ci sono anche tutte le dll da cui deriva.
Solo che la mia applicazione (che risiede altrove) non le vede.
Spero di essere stato chiaro nella spiegazione.
Grazie mille