サービスをバインドし、アプリケーションで Ninject を使用してコンストラクター引数を指定しようとしています。コンストラクター引数は、クエリ文字列または Cookie から取得できる値です。現在持っているコードは次のようなものです
kernel.Bind<SomeService>()
.ToSelf()
.InRequestScope()
.WithConstructorArgument("someID", ctx =>
// Try to get it from the posted form values
System.Web.HttpContext.Current.Request.Form["someID"] != null ?
long.Parse(System.Web.HttpContext.Current.Request.Form["someID"]) :
// Try to get it from the query string
System.Web.HttpContext.Current.Request.QueryString["someID"] != null ?
long.Parse(System.Web.HttpContext.Current.Request.QueryString["someID"])
: 0);
これは機能しますが、かなり醜いです。Form 値または QueryString 値をパラメーターとして渡すなど、これを実現する他の方法があることは認識していますが、Binding で定義することを好みます。私たちが理想的にやりたいことは、次のようなものです。
kernel.Bind<SomeService>()
.ToSelf()
.InRequestScope()
.WithConstructorArgument("someID", ctx => GetSomeID());
私が言えることから、これは不可能です。コンストラクターの引数注入ロジックを別のメソッドに分割して、1 行の if ステートメントをネストする必要がないようにする別の方法はありますか?