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).
fonte
2015-04-09 08:18:54
L'integrazione con il software esistente. Ho idee ma non so come farlo –