2015-04-09 8 views
5

Sto sviluppando un progetto e ho molti sottomoduli. Quando creo un altro sottomodulo, dobbiamo compilare il progetto e distribuirlo di nuovo. Non è molto bello ...Include la libreria dinamica dal web

Mi piacerebbe creare una logica per questo per automatizzare il mio lavoro. La mia idea è di caricare il sottomodulo in un archivio BLOB di Azure e in seguito il mio progetto scarica il sottomodulo e include questo sottomodulo nel mio progetto, senza compilare l'intero progetto.

Non so come fare l'integrazione con il mio software esistente.

Come posso fare questo?

+0

L'integrazione con il software esistente. Ho idee ma non so come farlo –

risposta

1

Hai alcune opzioni. Il più semplice secondo me è creare un'interfaccia generica, qualcosa come IPlugin. Implementalo nell'assembly remoto e consenti alla tua applicazione di controllarlo.

IPluginManager manager = this; // let this class implement IPluginManager 

Assembly assembly = Assembly.LoadFile(downloadedFilePath); 

foreach (Type type in assembly.GetTypes()) 
{ 
    foreach (Type interfaceType in type.FindInterfaces 
            (delegate(Type m, object filterCriteria) 
            { 
             return m.FullName == typeof(IPlugin).FullName; 
            } 
            , null 
            ) 

      ) 
    { 
     IPlugin plugin = (IPlugin)Activator.CreateInstance(interfaceType); 
     plugin.Activate(manager); 
    } 
} 

Il codice per IPlugin e IPluginManager:

public interface IPluginManager 
{ 
    void Foo(); 
} 

public interface IPlugin 
{ 
    void Activate(IPluginManager manager); 
} 

Questo codice carica un assembly scaricato salvate in un file a downloadedFilePath. Quindi trova le classi che implementano IPlugin e le carica.

Da lì in poi, è tutto tuo. È possibile utilizzare entrambe le interfacce per aggiungere funzionalità nei plug-in e nell'applicazione. La classe che implementa IPluginManager gestisce tutte le comunicazioni da e verso i plug-in.


Se non ti piace posizionare il proprio, è possibile utilizzare MEF (la Managed Extensibility Framework).

+0

Perché il downvote? –

+0

Hmmm, non lo so, ho votato per la tua risposta;) –

Problemi correlati