10

これを行う方法についての記事やリンクが見つからないようです。これは明らかな問題のようです(たとえば、ソースコードがない場合や、MEF用に作成されていない既存のタイプを使用したい場合)。

4

2 に答える 2

15

CompositionContainer.ComposeExportedValue既存のオブジェクトインスタンスをコンテナに追加する場合は、次のメソッドを使用できます。

container.ComposeExportedValue<MyClass>(myClassInstance);

あなたが本当に探しているのは、おそらく新しい規則ベースのプログラミングモデルであり、属性ではなく命名規則に基づいてパーツを作成できますが、この機能は.NET4.5でのみ使用できます。

myAssembly使用例(これは、を実装するIControllerすべてのタイプをエクスポートしますIController):

var registration = new RegistrationBuilder();

registration.ForTypesDerivedFrom<IController>()
            .Export<IController>();

var catalog = new AssemblyCatalog(myAssembly, registration);
var container = new CompositionContainer(catalog);

MEFの新しいコンベンションモデルの使用方法の良い例は、ここにあります

お役に立てれば。

于 2012-11-18T08:18:52.710 に答える
10

遺伝性エクスポート属性でインターフェースをマークすると、カタログ内のすべてのモジュールがエクスポートされ、エクスポート属性でマークされているかどうかに関係なく、このインターフェースが実装されます。

インターフェース:

[InheritedExport]
public interface IContract { ... }

モジュール:

// No [Export] attribute
public class ModuleImplementation : IContract { ... }

これで、MEFがモジュールを注入します。

于 2012-11-22T20:21:18.160 に答える