-->

Can a Ninject binding be based on a URL/route valu

2019-01-15 11:15发布

问题:

I have a single controller that I want to use for CRUD operations on two different entities which implement the same interface. I'd like for Ninject to give it a different repository based on a query string value in the URL (or maybe a different URL, routed to the same controller). Is this possible? How can I do it?

回答1:

That's usually a design smell but you could define the binding like this:

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

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


回答2:

The following worked for me, Getting A Specific value from a route

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

    return new RepoB();
})