4

我有一个控制器,我想将其用于实现相同接口的两个不同实体上的 CRUD 操作。我希望 Ninject 根据 URL 中的查询字符串值(或者可能是不同的 URL,路由到同一个控制器)给它一个不同的存储库。这可能吗?我该怎么做?

4

2 回答 2

7

这通常是一种设计气味,但您可以像这样定义绑定:

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

    return new RepoB();
}).InRequestScope();
于 2012-10-01T15:15:25.367 回答
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();
})
于 2018-01-16T13:32:51.830 回答