우리 응용 프로그램에서 Ninject를 사용하여 서비스를 바인딩하고 생성자 인수를 지정하려고합니다. 생성자 인수는 쿼리 문자열 또는 쿠키에서 가져올 수있는 값입니다. 현재 가지고있는 코드는 다음과 같습니다.Ninject 호출자가 반환하는 메서드 생성자 인수
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);
이 코드는 작동하지만 꽤 못생긴 코드입니다. FormValue 또는 QueryString 값을 매개 변수로 전달하는 등의 다른 방법으로이 작업을 수행 할 수 있다는 것을 알고 있지만 Binding에 정의하는 것이 좋습니다. 우리가 이상적으로하고 싶은 것은 다음과 같습니다.
kernel.Bind<SomeService>()
.ToSelf()
.InRequestScope()
.WithConstructorArgument("someID", ctx => GetSomeID());
내가 알 수있는 바로는 이것은 불가능합니다. 생성자 인자 주입 로직을 다른 메소드로 분해 할 수있는 또 다른 방법이 있나요? 그래서 우리는 하나의 if 문을 중첩 할 필요가 없습니까?
'ParametersFromHttpContext'는'IParameters'를 구현하지 않아야합니까? – Sung