4
我有一個控制器,我想用兩個實現相同接口的不同實體的CRUD操作。我希望Ninject根據URL中的查詢字符串值(或者可能是不同的URL,路由到同一個控制器)給它一個不同的存儲庫。這可能嗎?我該怎麼做?Ninject綁定可以基於URL /路由值嗎?
我有一個控制器,我想用兩個實現相同接口的不同實體的CRUD操作。我希望Ninject根據URL中的查詢字符串值(或者可能是不同的URL,路由到同一個控制器)給它一個不同的存儲庫。這可能嗎?我該怎麼做?Ninject綁定可以基於URL /路由值嗎?
這通常是一個設計的味道,但你可以這樣定義綁定:
kernel.Bind<IRepo>().ToMethod(ctx =>
{
var a = HttpContext.Current.Request["a"];
if (a == "b")
{
return new RepoA();
}
return new RepoB();
}).InRequestScope();
下面的工作對我來說,得到一個特定的值從路由
kernel.Bind<IRepo>().ToMethod(ctx =>
{
var a = HttpContext.Current.Request.RequestContext.RouteData.Values["RouteDateValue"]
if (a != null)
{
return new RepoA(a);
}
return new RepoB();
})
有點兒類似於http:/ /stackoverflow.com/questions/12487200/ninject-injection-based-on-a-route-data-value ... Whadya說你回答,我們vtc這? (或者如果你不同意,我會刪除評論) –
你能否詳細說明爲什麼這是一種氣味? – JeffreyABecker