2011-07-23 9 views
0

私はWindows Phone 7アプリケーションを開発中で、MVVMパターンを使用しています。私は、ページのViewModelのコンストラクタにパラメータを渡す必要があります。すべての私のdatacontextとバインディングはXAMLで行われます。私の研究を通して、私はNInjectのような依存性インジェクタを使ってそうする必要があることを知りました。NInject:ViewModelにパラメータを送信するクラスコンストラクタ

ここでは何が起こっているのか少し詳しくは: 私はさまざまなタスクをリストするListPickerを持つページがあります。各タスクには固有のTaskIDがあります。アイテムが選択されると、選択したタスクの詳細を表示する別のページを開く必要があります。 ViewModelで静的なTaskIDを使用すると、私のViewModelとバインディングはすべて完了し、機能しますが、もちろん変数を使用する必要があります。

ここに示したように、私はプロジェクト内のセットアップNInjectと、このようなViewModelLocator、私のNInjectModuleなどに必要な様々なクラスをしました:私は、この値が正しく取得ここでタスクIDをハードコーディングし、このコードを使用している

public class LighthouseNInjectModule : NinjectModule 
{ 
    public override void Load() 
    { 
     this.Bind<TaskViewModel>().ToSelf().WithConstructorArgument("TaskID", 2690); 
    } 
} 

注意私のコンストラクタに注入されます。もちろん、これはハードコードされており、選択したListPickerアイテムのTaskIDを取得する必要があります。私はListPickerから選択されたIDを取得する方法を知っていますが、NInjectがそれを認識するようにするにはどうすればクラスコンストラクターが実行されるときに正しい値を持ちますか?

Injector属性の使用を示すViewModelクラスの基本的な定義を次に示します。

public class TaskViewModel : INotifyPropertyChanged 
{ 
    [Inject] 
    public TaskViewModel(int TaskID) 
    { 
     //run function to get data using TaskID 
    } 
} 

答えて

1

WithConstructorArgumentFunc<Context, object>に評価怠惰を受け入れる別のoveloadを持っています。

+0

レスポンスありがとうRemo。私はGinHub for Ninjectの全面的な活動をしてきましたが、ここでどのように実装されているのか、どこで空になっているのかを見ています。 Ninjectのドキュメントは非常に薄いので、すべてを説明する良い本があったらいいですね。誰かがサンプルを持っていますか? – Walter

+0

@ Waltedbn:あなたが持っているバージョン/難しさについて説明できますか? Remoのアプローチは正しいですし、メモリーからは過負荷が長い間Ninjectにあったことになります。あなたは過負荷を見ていない?何を見ていますか?私たちは、あなたの正確な問題についてもっと詳しく説明できる場合を除いて、それ以上のことはできません。 Re book、Dependency Injection in .NETは、特にNinjectをカバーしていませんが、強くお勧めします。それとNinject wikiを読んだら、十分な情報が得られます。 (wikiは完璧です - あなたが必要としているイントロ素材/仕上げの詳細と完璧なものとのミックスによります) –

+0

本のおかげでありがとう。 8月の終わりに新しいバージョンが出てきて、注文しました。私の現在の問題に関しては、引数として "string name、Func callback"をとるオーバーロードが見えます。 私が問題を抱えているのは、コールバックの引数です。私は、第2のviewModelのctorに送る必要がある値を持つviewModelの関数である必要があると仮定しています。 – Walter

関連する問題