I haven't been able to find an answer for my problem. I'm using MEF to find and create my classes that implement IPlugIn, but I end up with two versions of each PlugIn class. I have determined that the AggregateCatalog only contains one Assembly that contains only 1 type of each class as a Part, but I am still getting two instances of each as the end result. I'm probably just doing something stupid, but I haven't found it yet. I'd appreciate any help...
... [ImportMany(typeof(IPlugIn))] public System.Lazy>[] Plugins { get; set; } ... //aggregatecatalog only contains one dll containing plugin classes, 4 of them container = new CompositionContainer(aggregateCatalog, CompositionOptions.DisableSilentRejection | CompositionOptions.IsThreadSafe);\ container.SatisfyImportsOnce(this); ... public void StartAll() { //We have 8 PlugIns here?? How? if (Plugins == null || Plugins.Count() == 0) { log.Warn("No PlugIns Available to Start!"); return; } foreach (var plug in Plugins) { log.Info("Starting PlugIn: " + plug.Value.GetName()); plug.Value.Start(); } } ... [Export(typeof(IPlugIn))] public class MyPlugIn : BasePlugIn, IPlugIn ...
I'm debugging in Visual Studio. I clearly see only one Assembly loading. The CompositionContainer has only 1 of each. After SatisfyImportOnce in StartAll(), I have two instances of each IPlugIn classes. Is this something with the way I am using ImportMany? I am open to any ideas.
Export
tag, do they? Next, something you could try is removing thetypeof(IPlugIn)
from yourExport
andImportMany
. Don't know why that would help, but I noticed I don't have that on myExport
s andImportMany
s. – burnttoast11