14

パーサー内にファクトリメソッドがあります。基本的に、トークンをロードするときに、そのトークンのハンドラーを検索するか、デフォルトのハンドラーにドロップスルーします。私はこれをswitchととして実装しましたDictionary<string,Type>が、どちらのアプローチでも、ハンドラークラス以外の場所にマッピングを保存する必要があります。

Ninject for IOCを使用しているので、次の方法でも実行できることに気付きました。

kernel.Get<ITokenHandler>(tokenName); 

しかし、それでは、ハンドラーが2つの場所で処理できるトークンに関する情報を保存する必要はありません。ハンドラーを装飾して、これが自動的にマップされるようにする方法はありますか?

4

2 に答える 2

11

私があなたの質問に正しく従えば、名前付きバインディングを取得したいようです。使用しているNinjectのバージョンについては言及していませんが、コードスニペットに基づいて、Ninject2.0を使用していると思います。その場合は、モジュールでのバインディングにはこれで十分だと思います。

Bind<ITokenHandler>().To<YourConcreteTypeHere>().Named(tokenName);

できるだけ多くの具象型を同じインターフェースにバインドし、名前で区別してから、質問で指定した正確な構文を使用してそれらを取得します。

キーが足りない場合はお知らせください。

于 2010-01-21T19:09:25.240 に答える
1

私が使用したテクニックの1つはBind、誰かに何かを選択してもらいたいポイントで、(コンテキスト内の)パラメーターの入力を要求できるような方法で詰め込むことです。

http://ninject.codeplex.com/wikipage?title=Providers%20and%20the%20Activation%20Contexthttp://ninject.codeplex.com/wikipage?title=Contextual%20Bindingの間で、選択を機能させるためにあなたが言うことができるような方法Only(When.Context...)

于 2010-01-20T13:34:36.573 に答える