4 Stimmen

Kann eine Ninject-Bindung auf einem URL/Routenwert basieren?

Ich habe einen einzelnen Controller, den ich für CRUD-Operationen auf zwei verschiedenen Entitäten verwenden möchte, die dieselbe Schnittstelle implementieren. Ich möchte, dass Ninject ihm basierend auf einem Abfragezeichenfolgenwert in der URL (oder vielleicht einer anderen URL, die demselben Controller zugewiesen ist) ein anderes Repository gibt. Ist das möglich? Wie kann ich das tun?

7voto

Darin Dimitrov Punkte 990883

Das ist normalerweise ein Designfehler, aber Sie könnten die Bindung wie folgt definieren:

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

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

0voto

Lord Darth Vader Punkte 1765

Das Folgende hat für mich funktioniert, den spezifischen Wert von einer Route abzurufen

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

    return new RepoB();
})

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X