Это моя часть Compose, где я вижу в каталоге dir ПРАВИЛЬНЫЙ НОМЕР, который также должен быть загружен, в asmCatalog.
public void Compose()
{
var aggrCatalog = new AggregateCatalog();
//A directory catalog
var dirCatalog = new DirectoryCatalog(Path.GetDirectoryName(
Assembly.GetExecutingAssembly().Location) + "\\Extensions", "*.dll");
//An assembly catalog
var asmCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());
aggrCatalog.Catalogs.Add(dirCatalog);
aggrCatalog.Catalogs.Add(asmCatalog);
//Create a container THE CONTAINER DOES CONTAIN 5 PARTS AND
// LOOK PERFECTLY OK. The 5 parts consist of 3 from this assembly
// and two from the external assembly
var container = new CompositionContainer(aggrCatalog);
// IT DOES NOT COMPOISE THE 2 PARTS THAT WERE LOADED FROM THE EXTERNAM ASSY
container.ComposeParts(this);
}
Я использую этот интерфейс и атрибуты:
namespace Q95Interface
{
public interface IQ95_EventHandler
{
void HandleQ95Event();
void HandleQ95Event(string s);
}
public interface IUIExtensionDetails
{
string Event_Group_Name { get; }
string Event_Name { get; }
}
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class Q95_EventHandlerAttribute : ExportAttribute
{
public Q95_EventHandlerAttribute() : base(typeof(IQ95_EventHandler)) { }
public string Event_Group_Name { get; set; }
public string Event_Name { get; set; }
}
}
И реализации, которые я хочу импортировать (те, что в локальной сборке выглядят ИДЕНТИЧНО, загружаются и работают отлично)
namespace MefTest
{
[Export(typeof(IQ95_EventHandler))]
[ExportMetadata("EventType", "START_ORDER_EXTERNAL")]
public class Q95_Event_Handler4 : IQ95_EventHandler
{
public void HandleQ95Event()
{
Console.WriteLine("HANDLE EVENT START_ORDER");
}
public void HandleQ95Event(string s) { Console.WriteLine(s); }
}
[Export(typeof(IQ95_EventHandler))]
[ExportMetadata("EventType", "STOP_ORDER_EXTERNAL")]
public class Q95_Event_Handler5 : IQ95_EventHandler
{
public void HandleQ95Event()
{
Console.WriteLine("\nHANDLE EVENT STOP_ORDER\n");
}
public void HandleQ95Event(string s) { Console.WriteLine(s); }
}
}
Я отдельно скомпилировал в dll интерфейс и определения атрибутов