2012-10-01 3 views
4

동일한 인터페이스를 구현하는 두 개의 다른 엔티티에서 CRUD 작업에 사용하려는 단일 컨트롤러가 있습니다. Ninject가 URL에 쿼리 문자열 값 (또는 다른 컨트롤러의 동일한 URL로 라우트 된 다른 URL)을 기반으로 다른 저장소를 제공하고 싶습니다. 이것이 가능한가? 내가 어떻게 해? 일반적으로 디자인 냄새입니다하지만 당신은 다음과 같은 바인딩을 정의 할 수 있습니다Ninject 바인딩은 URL/라우트 값을 기반으로 할 수 있습니까?

답변

7

:

kernel.Bind<IRepo>().ToMethod(ctx => 
{ 
    var a = HttpContext.Current.Request["a"]; 
    if (a == "b") 
    { 
     return new RepoA(); 
    } 

    return new RepoB(); 
}).InRequestScope(); 
+0

일종의 유사한 경로에서 특정 값을 얻기 나를 위해 일한 HTTP ://stackoverflow.com/questions/12487200/ninject-injection-based-on-a-route-data-value ... Whadya가 대답을하고 우리는 이것을 vtc라고합니까? (또는 당신이 동의하지 않는 경우, 나는 또한 주석을 제거 할 것입니다) –

+4

이것이 왜 냄새인지 자세히 설명해 주시겠습니까? – JeffreyABecker

0

다음에

kernel.Bind<IRepo>().ToMethod(ctx => 
{ 
    var a = HttpContext.Current.Request.RequestContext.RouteData.Values["RouteDateValue"] 
    if (a != null) 
    { 
     return new RepoA(a); 
    } 

    return new RepoB(); 
}) 
관련 문제