Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Caricamento dinamico e serializzazione

In .NET realizzare una applicazione che carica dinamicamente codice tramite plugin è uno scherzo grazie al metodo Assembly.LoadFrom(), esistono però alcuni problemi legati alla serializzazione. Se dovete deserializzare ad esempio un tipo di dato che si trova presente in una dll che avete caricato dinamicamente tramite il LoadFrom(), purtroppo vi si genererà un errore di assembly non trovato, anche se l'assembly è stato caricato. Inoltre in un caso particolare mi trovo a non avere nemmeno caricato il file al momento della deserializzazione e quello che cerco è un modo per ritardare il caricamento di un assembly, e farlo solamente quando si rivela necessario per la deserializzazione di un oggetto.

La soluzione è l'evento AssemblyResolve dell'oggetto AppDomain, che viene generato ogniqualvolta l'appdomain non riesce a risolvere un nome di assembly permettendo di specificare manualmente l'assembly cercato, per questa ragione basta scrivere una piccola classe helper che permette di impostare dall'esterno i possibili path che contengono gli assembly da caricare.

A questo punto si crea un metodo che è in grado di gestire l'evento AssemblyResolve. Tale metodo prima controlla se l'assembly cercato è stato già caricato, in caso contrario scandisce tutte le cartelle alla ricerca di una dll che matcha il nome dell'assembly.

Nel primo blocco si cicla semplicemente tra gli assembly caricati nell'AppDomain corrente e si ritorna l'assembly se lo si trova già caricato, nel secondo blocco viene invece semplicemente fatta una ricerca su tutte le cartelle che contengono gli assembly esterni alla ricerca dell'assembly necessario, se non viene trovato nulla si torna null e il sistema genererà la solita eccezione di assembly non trovato.

Alk.

Print | posted on venerdì 7 settembre 2007 22:19 | Filed Under [ .NET ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET