0

現在、MEFを使用して、名前でデリゲートをインポートおよびエクスポートしています。

public delegate IThing ThingGenerator();

[Export("ThingGenerator")]
public IThing MyThingGenerator() { ... }

[ImportMany("ThingGenerator")]
public IEnumerable<ThingGenerator> ThingGenerators { get; set; }

保守性のために、型を使用してインポートおよびエクスポートしたいと思います。しかし、私たちはこれを機能させることができないようです。

[Export(typeof(ThingGenerator))]
public IThing MyThingGenerator() { ... }

[ImportMany(typeof(ThingGenerator))]
public IEnumerable<ThingGenerator> ThingGenerators { get; set; }

一部のフォームでは、エクスポートされた関数がデリゲートタイプと一致しないことを示すエラーが発生します。他のシナリオでは、タイプはエクスポートされないようです。誰かがこれを成功させましたか?

4

1 に答える 1

3

実際にはタイプごとにインポートおよびエクスポートできますが、その場合にのみ、typeof(ThingGenerator)ではなくtypeof(IThing)をエクスポートおよびインポートしてみてください。

通常、エクスポートされたパーツは何らかのインターフェイス(タグのように機能する空のインターフェイスの場合もあります)を実装しているため、インポートするものを識別できますが、タイプでも機能します。

これは、MEFの使用を開始するのに役立つ優れたビデオチュートリアルです(SilverLightにありますが、WPFでも機能し、Winformsでも機能するはずです) パート1 パート2

パート2を確認してください。これは、メタデータを使用してカスタムエクスポート属性を作成するときに特に役立つ場合があります。

これがお役に立てば幸いです。

于 2012-12-31T01:45:31.370 に答える