2016-05-10 10 views
0

MEFを使用して、FooTypeというクラスがあり、それに[Export]属性を適用したとしましょう。今、私はこのFooTypeを別の場所にインポートして使用したいと思っています。[インポート]と_container.GetExportedValue <>()の間に相違がありますか?

私は、これら二つの解決策を試してみました:

[Import] 
public FooType Foo { get; set; } 

private void MyMethod() 
{ 
    Foo.DoSomething(); 
} 

private void MyMethod() 
{ 
    // _container is of type CompositionContainer and comes from the [ImportingConstructor] 
    _container.GetExportedValue<FooType>().DoSomething(); 
} 

働いていたこれらの両方

は、 FooTypeDoSomething()メソッドが正しく呼び出されます。だから、それは私に不思議に思う:

  • エクスポートを解決するこれらの2つの方法は本当に似ていますか?それとも何か違いはありますか?
  • 2つの間に推奨ソリューションがありますか?

答えて

1

[インポート]は、基本的にMEFがGetExportedValueを呼び出してプロパティまたはフィールドに割り当てるようにします。つまり、ほとんどの場合、オブジェクトにコンテナへのアクセス権を持たせたくありません。 2番目の例では、コンテナ自体をImportingConstructor経由でインポートしたとします。私は通常コンストラクタ経由でFooTypeをインポートするだけです。私はいつも、プロパティ注入ではなくコンストラクタ注入を好みます。オブジェクトの前提条件が完全にクリアされ、読み込み専用のプロパティにインポートを格納できます。

関連する問題