Wie Ninject angewiesen wird, an eine Implementierung zu binden, auf die es keinen Bezug hat

8

Ich verwende NinjectMVC3 in meinem ASP.NET MVC3-Projekt.

Ich habe 3 Ebenen

  • Foo.Web
  • Foo.Services
  • Foo.Data

Foo.Web verweist auf Foo.Services, aber nicht auf Foo.Data. Einer meiner Dienste sieht so aus.

%Vor%

NinjectMVC3 führt diese Bootstrapping-Methode im Foo.Web-Startup

aus %Vor%

Wie kann ich FooServices Abhängigkeiten von Foo.Web injizieren?

    
MVCDatabaseInitializer 05.06.2011, 04:26
quelle

1 Antwort

7

Damit Sie in die richtige Richtung weisen, schlage ich vor, dass Sie sich die Zwiebel ansehen Architektur.

Es ist Grundvoraussetzung, dass jeder Code von zentraleren Ebenen abhängen kann. In Ihrem Szenario (und für MVC3-Apps, bei denen das Repository-Muster verwendet wird, ist es üblich) sollte Ihre Benutzeroberfläche einen Verweis auf die Services-Ebene haben und es ist akzeptabel, einen Verweis auf die Datenebene zu haben.

Wenn Sie bereit sind, das zu akzeptieren (es ist eine harte Pille, wenn Sie von einem klassischen N-Tier-Setup kommen, ich weiß), dann wird Ihre Situation viel einfacher.

Mit Ninject machst du jetzt etwas wie folgt:

In Ihrer NinjectMVC3.cs Datei wird Ihr CreateKernel

%Vor%

Nun fügen Sie in Ihrer Servicesbene einen Verweis auf Ninject hinzu (einfach nur Ninject über NuGet, nicht den MVC3-Drop-in via NuGet) und fügen das über das ServiceDIModule, was wie folgt aussieht, hinzu:

%Vor%

und Sie wiederholen den gleichen Prozess für die Daten Tier-Injektionen, die Sie haben können (UnitofWork, DatabaseFactory, IFooRepository, etc.)

%Vor%

Jetzt haben Sie Zugriff auf alle Bindungen, die Sie im Voraus benötigen. Ihre Frage an mich läuft also auf eine Verschiebung des Denkens hinaus. Wenn Sie das Zwiebel-Konzept akzeptieren (widerwillig oder nicht), löst sich Ihr Szenario sauber auf.

Sie können auch Project Silk und CodeCampServer ausprobieren . Beide implementieren das "Zwiebel" -Konzept bis zu einem gewissen Grad (Silk sicher, ich schaue mir die Lösung gerade an und das UI-Webprojekt enthält einen Verweis auf das Datenprojekt, das alle Repos enthält)

Lass mich wissen, was du denkst.

    
Khepri 05.06.2011 20:22
quelle