【问题标题】:GetExports<T, TMetaDataView> in MEF returns no elements with AllowMultiple = TrueMEF 中的 GetExports<T, TMetaDataView> 不返回 AllowMultiple = True 的元素
【发布时间】:2012-10-11 20:25:35
【问题描述】:

我不确定 MEF 的工作原理。我用AllowMultiple=true 创建了一个自定义属性。这里是:

public interface IQuestionFactoryMetadataView
{
    IQuestionFactoryMetadata[] Metadatas { get; }
}

public interface IQuestionFactoryMetadata
{
    Levels Difficulty { get; }
    int Quantity { get; }
}

[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = true)]
public class ExportQuestionFactoryAttribute : ExportAttribute, IQuestionFactoryMetadata
{
    public ExportQuestionFactoryAttribute(Type type, Levels difficulty, int quantity)
        : base(type.Namespace, typeof(IQuestionFactory))
    {
        this.Difficulty = difficulty;
        this.Quantity = quantity;
    }

    public Levels Difficulty { get; private set; }
    public int Quantity { get; private set; }
}

// 
[ExportQuestionFactory(typeof(NonConcreteQuestionFactory), Levels.Beginner, 10)]
[ExportQuestionFactory(typeof(NonConcreteQuestionFactory), Levels.Medium, 20)]
[ExportQuestionFactory(typeof(NonConcreteQuestionFactory), Levels.Expert, 30)]
[ExportQuestionFactory(typeof(NonConcreteQuestionFactory), Levels.Master, 40)]
public class NonConcreteQuestionFactory : QuestionTemplateFactory
{
    ...
}

如果我使用弱类型元数据,我的导出突然得到满足:

        var exports = container.GetExports<IQuestionFactory, IDictionary<string, object>>(typeof(PEMDAS.Core.TimesTables.WorksheetTemplate).Namespace);

但如果我使用强类型,我的导出变量是空的。

        var exports = container.GetExports<IQuestionFactory, IQuestionFactoryMetadataView>(typeof(PEMDAS.Core.TimesTables.WorksheetTemplate).Namespace);

【问题讨论】:

    标签: c# export mef containers ioc-container


    【解决方案1】:

    我没有看到 QuestionFactoryMetadataView 你能显示那个类型吗?

    var exports = container.GetExports<IQuestionFactory, IQuestionFactoryMetadata>(...)
    

    工作?

    【讨论】:

    • 对不起,这是一个接口..我正在测试。使用 IQuestionFactoryMetadata 接口不起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多