Ninject 3.2.2.0を使用していますが、非同期メソッドをバインドしようとしています。C#Ninject:メソッドasyncにバインドする方法
これは私がこれまでに得たものである:
kernel.Bind<Task<MyInterface>>().ToMethod(async ctx =>
{
var someData = await DoSomethingAsync();
return new SomethingElse(someData);
}).InRequestScope();
と呼ばれることは決してありませんDoSomethingAsync
私の方法。私はMyInterface
が要求されているので、それが呼び出されていないと信じています。Task<MyInterface>
ではありません。
アイデア?
サービスまたはデータベースまたはその両方から要求される必要があるCurrentUserオブジェクトにメタデータがあるとします。また、CurrentUserに依存する5つのドメインオブジェクトを構築するとします。 1回のリクエストにつき5回データをリクエストしますか?なぜ、タスクを返すことができるメソッドにバインドしないのですか?タスクが返されたからといって、IOCが待つ必要があるわけではありません。タスクが必要なドメインオブジェクトを待つことができます。違いは、データは一度だけ要求されることです。依存関係はすべて同じタスクを待っています。 –
@StewartAnderson:ここで新しい質問をしている気がします。あなたがここにそのように掲示し、適切な詳細を提供して(いくつかのサンプルコードが役立つでしょう)、その質問へのリンクをコメントに載せれば、私はその質問に答えるために最善を尽くします。 – Steven
あなたのIOCにasnycがないと言うと、私の解決策が問題になることはありませんでした。 私のソリューションをIOCバインディングコードの1行に一般化するには、 kernel.Bind>()。ToMethod(c => UserProvider.Get())。InRequestScope(); 現在のユーザーが必要なものは、IOCを介して非同期に受信します。タスクを必要とするIOCによって構築されたオブジェクトは、タスクを待機しますが、これらのオブジェクトはすべて.InRequestScope()のために同じタスクを待機します。 –