Binding Ninject abhängig von Controller-Anfragen

8

Ich lerne gerade Ninject und wie man es in MVC-Situation implementiert. Ich versuche herauszufinden, was der beste Weg ist, das folgende Szenario einzurichten.

Ich habe ein Team-Objekt, das durch die Anwendung wiederverwendet wird, was ich tun muss, ist, dass Ninject die Bindung automatisch löst, abhängig davon, woher die Anfrage kommt.

In meiner NinjectController-Fabrik habe ich derzeit einen Service, der ein Team in sein eigenes Repository auflöst

%Vor%

Aber wenn die Anfrage von SoccerController kommt, muss ich binden:

%Vor%

Sollte dies unter bestimmten Voraussetzungen geschehen, richten Sie separate Dienste ein? Was ist der beste Ansatz hier? Oder bin ich komplett von der Stange hier ...

    
keeg 06.05.2011, 18:03
quelle

3 Antworten

12

Es klingt, als ob Sie die kontextabhängige Bindung verwenden möchten. Wenn das nicht hilft, könnten Sie vielleicht die Frage neu formulieren, damit ich eine bessere Vorstellung davon habe, was genau Sie suchen.

Dies macht mehr Sinn nach der Bearbeitung. Ich bin nicht ganz sicher, wie Sie Ihre Anwendung strukturiert haben, aber ich würde wahrscheinlich das ITeamRepository an den Controller übergeben und der Konstruktor würde in etwa so aussehen.

%Vor%

Und dann die Bindungen:

%Vor%     
Timothy Strimple 06.05.2011, 18:12
quelle
4

@Timothy Strimple's Antwort ist weitgehend korrekt (daher meine +1) außer:

  1. Es ist für Ninject v1 - die CodePlex-Seite muss verschwinden, da jetzt alles auf github lebt
  2. Sie können die Tatsache ausdrücken, dass die zu verwendende Bindung abhängig vom Controller ist, der über bedingte Bindung beteiligt ist - gibt es eine Beispiel im Wiki
Ruben Bartelink 06.05.2011 19:38
quelle
1

In den Konstruktoren Ihres Controllers sollten Sie entweder eine Schnittstelle oder eine abstrakte Implementierung des Typs übergeben, für den Ninject einen konkreten Typ bereitstellt.

%Vor%

In der Klasse NinjectControllerFactory wird die Bindung folgendermaßen eingerichtet:

%Vor%

Wenn Ihre konkrete Implementierung Konstruktorargumente benötigt, können Sie sie zu dem Zeitpunkt übergeben, an dem sie gebunden sind.

%Vor%

Hoffe, das zeigt Ihnen in die richtige Richtung.         ;

    
Yuck 06.05.2011 18:09
quelle

Tags und Links