Search code examples
asp.net-mvcninjectninject.web.mvc

Can a Ninject binding be based on a URL/route value?


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?


Solution

  • 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();