[VS2010][.NET4][C#4][WPF4]
Bonjour,
j'utilise les MEF pour mon nouveau projet à base de plugin.
ce projet est composé de :
HOST : l'application (exe) qui va accueillir (afficher) le plugin (view) donc qui fait la composition egalement!!
PLUGIN_VIEW1 : plugin (dll) avec une view qui sera afficher dans HOST
PLUGIN_LOGGER : plugin (dll) sans vue , uniquement des fonctions uqui permettent de faire du log
plugin_logger : possède des fonctions de log, je souhaiterai exporter par exemple la fonction Log(string txt); à tous les autres plugins mais également à l'host
exemple
code du logger (logger.dll)
code du contrat (contract.dll)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 namespace Module.Tools.Logger { [Export(typeof(ILogger))] public class ConsoleLogger : ILogger { public void Log(string message) { Console.WriteLine(message); } } }
code l'host (host.exe)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 namespace Contract { public interface ILogger { void Log(string message); } }
code du plugin view (plugin_view.dll)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 CompositionContainer container ; public bool CheckLicences() { AggregateCatalog objCatalog = new AggregateCatalog(); AssemblyCatalog objAssembly = new AssemblyCatalog(System.Reflection.Assembly.GetExecutingAssembly()); objCatalog.Catalogs.Add(objAssembly); objCatalog.Catalogs.Add(new DirectoryCatalog("Modules")); container = new CompositionContainer(objCatalog); container.ComposeParts(this); // ICI LOGGER EST OK il n'est pas NULL Logger.Log("click check box"); }
comme vous le voyez précédemment lors de la composition Logger n'est pas null dans l'host mais il et null dans le plugin view.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public partial class PluginView : UserControl { [Import(typeof(ILogger))] public ILogger Logger { get; set; } public PluginView() { InitializeComponent(); // ici logger est null après la composition Logger.Log("message test"); } }
apparemment l'import ne fonctionne que à l'endroit ou se trouve la composition c'est à dire dans l'host...
comment faire pour que la fonction Log soit propagé egalement au autres plugins qui sont composé..
Merci d'avance de votre aide
Aram
Partager