2012-10-01 33 views
4

我有一個控制器,我想用兩個實現相同接口的不同實體的CRUD操作。我希望Ninject根據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(); 
}) 
相關問題