2011-12-20 8 views
1

をロードするモジュールのリストをダウンロードするために、私はプリズム/ MEFにプロジェクトを変換すると「リストダウンローダ」インスタンス参照が設定されているが、中央デシベルプリズム/ MEF -

からモジュールのリストをダウンロードする必要がありますしていますそのコードを想定してゼロにするためには、適切な場所に

ではありませんここでPROBはSYNC1がnullのある流れ

public class Bootstrapper : MefBootstrapper { 
    [Import] 
    IMyList sync1 { get; set; } 

    ... 
    protected override void ConfigureAggregateCatalog() { 
     **sync1.Sync();    // sync1 is null** 

     AggregateCatalog.Catalogs.Add(....) 
    } 
    ... 
} 


[Export(typeof(IMyList))] 
private class DBSync : IMyList { 
    [Import] IDBConn mydb { get; set; } 
    public void Sync(){ 
     // connects to mydb and gets a list of auth modules for the current user 
    } 
} 

です!!どうして ?

ので、plsは私の知る限り、あなたがIMyListを輸出していない見ることができるように簡単

答えて

0

...

ナイジェル...私はこのことができます願っていますが、プライベートクラスDBCON前の行に

をエクスポート属性を配置する必要があると思います。まだあなたの部品を作っていない可能性はありますか?

Bootstrapperの部品をコンパイルするには、たとえばGetExportedValue <>を使用してMEFによってインスタンス化する必要があります。そうしないと、IMyListはnullになります。

もしそうなら、あなたのコードを変更して、MEFにすでにそのカタログにIMyList用の部品があるようにして、部品を追加する必要があります。これはあなたの問題ではない場合、すなわち、DBsyncを輸入のいずれかを満たすとき

は、問題の別の可能なソースは、組成エラーが考えられます。この場合

[Import] IDBConn mydb { get; set; } 

あなたは例外を取得する必要があります。すべての共通言語ランタイム例外を解除するオプションを設定しながら、デバッグでプログラムを実行してみることもできます。

EDIT:あなたのコンテナがnullである

場合、それはあなたのブートストラップクラスで輸入を構成することができません。 MEfはクラスをインスタンス化するときにそのコンポーネントをインポートします。コンテナが作成される前に、使用可能なインポートに依存することはできません。

あなたはする必要があります。そのためには、それはもう輸入ではありませんです

変更IMyListのSYNC1。

MEFで実際にIMyListを作成する必要がある場合は、一時的なコンテナ(MefBootStrapperを使用する必要はありません)を作成し、この一時的なコンテナを使用してbootstrapperクラスのパーツを作成する必要があります。後で処分することができます。この他の回答(Satisfy Imports in custom ExportProvider)を参照してください。

私は本当にあなたがそうするべき魅力的な理由がない限り、最初のオプションが厳しい、sync1を変更することをお勧めします。

+0

問題はコンテナがSync()を使用して取得した後に読み込まれるBootstrapper.ConfigureModuleCatalog – Kumar

0

を行く私は私が何か間違ったことをやっている知っているが、これは最初から私の第一プリズムプロジェクトです。そのため私は、あなたがあなたのカタログを設定するには、SYNC1を使用している

+0

申し訳ありませんが、コードで実行されましたが、コードで表示されていませんでした。 – Kumar

関連する問題