.net 无法从外部DLL加载接口的实现

.net 无法从外部DLL加载接口的实现,.net,.net-4.0,mef,.net,.net 4.0,Mef,这是我的撰写部分,我在目录中看到应该加载的正确编号,以及asmCatalog public void Compose() { var aggrCatalog = new AggregateCatalog(); //A directory catalog var dirCatalog = new DirectoryCatalog(Path.GetDirectoryName( Assembly.GetExecutingAssembly().Location)

这是我的撰写部分,我在目录中看到应该加载的正确编号,以及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; }
    }
}
我想要导入的实现是(进入本地程序集的实现看起来完全相同,并且可以完美地加载和工作)


我已将接口和属性定义分别编译到dll中

您的
[Import]
定义为什么?我怀疑这可能是因为您的导出没有导出元数据。事实上,您已经创建了一个自定义的导出属性,但没有使用它

尝试更改导出:

[Q95_EventHandler(Event_Group_Name = "Something", Event_Name = "Something Else")]
public class Q95_Event_Handler5 : IQ95_EventHandler
{

}
并确保您相应地导入:

[ImportMany]
public IEnumerable<Lazy<IQ95_EventHandler, IUIExtensionDetails>> Handlers { get; set; }
[ImportMany]
公共IEnumerable处理程序{get;set;}

值得一看Daniel Plaisted的博客文章,这篇文章的标题是了解您可能遇到的问题。

非常感谢,这是问题的解决方案。仅供参考信息我的原始导入语句是//public Lazy[]Q95EventHandlers{get;set;}
[ImportMany]
public IEnumerable<Lazy<IQ95_EventHandler, IUIExtensionDetails>> Handlers { get; set; }