Poursuivant ma quête d'une implémentation de plug-in de qualité, j'ai testé les fonctionnalités d'analyse de l'assemblage de StructureMap.Obtenir une instance de type héritant de la classe de base, implémentation de l'interface, en utilisant StructureMap
Tous les plugins héritent de la classe abstraite PluginBase. Cela permettra d'accéder aux services d'application courants tels que la journalisation. Selon sa fonction, chaque plugin peut alors implémenter des interfaces supplémentaires, par exemple, IStartUpTask.
Je suis mes plugins comme en cours d'initialisation si:
Scan(x => {
x.AssembliesFromPath(HttpContext.Current.Server.MapPath("~/Plugins"),
assembly => assembly.GetName().Name.Contains("Extension"));
x.AddAllTypesOf<PluginBase>();
});
La difficulté que je suis d'avoir ensuite est de savoir comment travailler sur l'interface (pas PluginBase) dans le code. Il est assez facile de travailler avec PluginBase:
var plugins = ObjectFactory.GetAllInstances<PluginBase>();
foreach (var plugin in plugins)
{
}
Mais des fonctionnalités spécifiques (par exemple IStartUpTask.RunTask) est liée à l'interface, pas la classe de base.
J'apprécie que cela ne soit pas spécifique à structuremap (peut-être plus une question de réflexion).
Merci, Ben
@Joshua - la méthode OfType fait exactement ce dont j'ai besoin pour l'instant, parfait. Je connais toutes les interfaces au moment de l'exécution, donc je vais me pencher sur la IRegistrationConvention. Merci –
@Joshua - vient d'ajouter un scanner plugin personnalisé. Je ne semble pas avoir la fonction For() .Add (type) disponible? –
Ignorer ce qui précède - J'utilisais une ancienne version de StructureMap. J'ai maintenant mis à jour à la dernière version. –