2012-01-26 8 views
1

MEFとPrism v4を使用する場合、[Import]を実行するための推奨方法と、これらの呼び出しの相違点は何ですか?Mef Prism v4 - [インポート] vs [インポートコンストラクタ]

オプション1:

public class TestClass 
{ 
    [Import] 
    private IRegionManager _RegionManager; 

    public TestClass() 
    { 
     // stuff here 
    } 
} 

オプション2:

public class TestClass 
{ 
    private IRegionManager _RegionManager; 

    [ImportingConstructor] 
    public TestClass(IRegionManger regionManager) 
    { 
     this._RegionManager = regionManager; 
     // stuff here 
    } 
} 

これらの違いは何ですか?どちらがお勧めですか?

答えて

2

これはスタイルの問題ですが、私はフィールド上のImportよりもImportingConstructorの方がはるかに大きいです。 ImportingConstructorでは、MEFサポートの有無にかかわらず使用できるオブジェクトを定義することができます。契約は明らかであり、プログラマーによってよく理解されています。

Importを使用すると、あなたのクラスはMEFからもっと使いやすくなります。開発者は、オブジェクトのすべてのプロパティを調べたり、構築後に設定する必要があるオブジェクトを判断したりすることなく、オブジェクトのコンストラクタへの依存性を提供するために使用されます。

+0

[OK]をおかげで、私は混合し、私のコードでマッチングされました私は '[ImportingConstructor]'か '[Import]'のどちらかに行くべきだということを認識しました。実際には、PrismやMEFのスタイルだけではなく、違いがないと思います。他の誰かがそれについてのコメントを持っているかどうかを調べるために、私は答えとしてあなたのマークをつけます:) – John

2

[ImportingConstructor]を使用すると、コンストラクタでインポートにアクセスできます。 [インポート]あなたはsavely(IPartImportsSatisfiedNotification.OnImportsSatisfiedであなたのインポートにアクセスすることができます)

と私は[ImportingConstructor]推薦とところでパブリックフィールドはprivateである必要があります:)

+0

私の実際のプログラムでは、私の実際のプログラムに感謝しています。私は秘密です。それは私が持っていたのと同じ質問で。だから、[Import]ではコンストラクターでは利用できませんでしたか? Lazy <>が読み込まれたときの違いは? – John

+0

怠け者かどうかは関係ありません – blindmeis

関連する問題