2

遅延評価されるパラメータを注入しようとしています:

private readonly Lazy<IIdentifier> _userIdentifier;

public DocumentController(Lazy<IIdentifier> userIdentifier)
{
    _userIdentifier = userIdentifier;
}

userIdentifier作成するのに費用はかかりませんが、これは WebApi アプリケーションであり、userIdentifier依存する別のオブジェクトから抽出されHTTPContextますApp_Start。コントローラー コンストラクターで指定するLazy必要があることは、コードのにおいのように思えます。コントローラーは、このパラメーターが構成時に特別な処理を必要とすることを認識したり気にしたりする必要がないからです。

次のように注入されます。

kernel.Bind<IIdentifier>()
      .ToMethod(x => kernel.Get<IMinimalSecurityToken>().UserID);

オブジェクトのインスタンスを新しくするほど簡単ではないので、この場合は Ninject Factory 拡張機能を使用できないと思います。このケースを処理するためだけにファクトリを作成したくはありませんがLazy、コントローラーに貼り付けるよりは望ましいと思いますが、Ninject の自動ファクトリを使用する方法があることを願っています考えていません。

4

1 に答える 1

0

ファクトリを使用したくない場合は、ファクトリがここでのユースケースにあまり適していないことに同意します。代わりに、プロバイダを使用してトークンを提供できます。

public class MyIdentityProvider : Provider<IIdentifier>
{
    ...
}

kernel.Bind<IIdentifier>().ToProvider<MyIdentityProvider>();
于 2013-11-09T01:23:01.317 に答える