我正在尝试在我们的应用程序中使用 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());
据我所知,这是不可能的。是否有另一种方法可以将构造函数参数注入逻辑分解为另一种方法,这样我们就不必嵌套一行 if 语句?