0

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);
4

1 に答える 1

0

QuestionFactoryMetadataView が表示されません。そのタイプを表示できますか?

する

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

仕事?

于 2012-10-12T02:21:46.103 に答える