2012-11-17 9 views

答えて

15

あなたはコンテナに既存のオブジェクトのインスタンスを追加するために探しているなら、あなたはCompositionContainer.ComposeExportedValueメソッドを使用することができます

container.ComposeExportedValue<MyClass>(myClassInstance); 

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

使用例(これはIControllerとしてIControllerを実装myAssembly内のすべての種類をエクスポートします):

var registration = new RegistrationBuilder(); 

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

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

MEFの新条約モデルcan be found hereを使用する方法の良い例。

これが役に立ちます。あなたはInheritedExport属性とのインタフェースをマークすると

+0

完全に感謝します。悲しいことに、これは4.5フィーチャーだけのようです。 – blue18hutthutt

+0

プレビュー版であなたの例をベースにしていると思いますか? [Implements]メソッドはありません。[代わりに](https://msdn.microsoft.com/en-us/library/system.componentmodel.composition.registration.registrationbuilder.aspx)いくつかの 'ForType' /' ForTypesメソッド。 – Stijn

+1

@Stijnあなたが正しいです、それ以来、APIは変更されました。--ForTypesDerivedFrom'が、 'Implements'を置き換えました。私はそれに応じて私の答えを編集しました。 –

10

、カタログ内のすべてのモジュールは、彼らがエクスポート属性かでマークされているかどうか、このインタフェースを実装しており、輸出されています。

インタフェース:

[InheritedExport] 
public interface IContract { ... } 

モジュール:

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

今MEFは、モジュールを挿入します。