CompositionContractMistachException
.NET 4.0 の MEF でカスタム属性クラスを使用すると、エラーが発生しました。
Unable to create an instance of the Metadata view '(snip).ModuleExportAttribute, (snip), Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' because a constructor could not be selected. Ensure that the type implements a constructor which takes an argument of type IDictionary<string, object>.
これが私のModuleExportAttribute
クラスです。特別なことは何もありません:
[MetadataAttribute]
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
public sealed class ModuleExportAttribute : ExportAttribute
{
public ModuleExportAttribute(string name) : base(typeof(IModule))
{
this.Name = name;
}
public string Name { get; private set; }
}
使い方はこんな感じです。
[ModuleExport("MyModule")]
public class MyModule : IModule
{
...
}
要求されたコンストラクターを追加すると、例外はなくなります。
ただし、この要件を述べているリファレンスは見つかりませんでした。反対に、そのようなコンストラクターなしでカスタム属性クラスを使用する多くの例とブログ投稿を見ました。ここで何か不足していますか?