Ich bin Ninject sehr neu und versuche Ninject 2 mit MVC und Linq. Ich habe eine SqlProductRepository-Klasse und alles, was ich wissen möchte, ist die beste Möglichkeit, die Verbindungszeichenfolge im Konstruktor zu übergeben, wenn ich das Repository-Objekt in den Controller injiziere.
%Vor%Dies ist meine ProductController-Klasse, in die ich das Repository einfüge:
%Vor%Kann mir bitte jemand diesbezüglich Anweisungen geben?
Sie tun:
%Vor% in Ihrem Code - dies ist die Neuerung und Bindung an Klassen, die Sie aus Ihrem Code mithilfe eines DI-Containers entfernen möchten. Überlegen Sie zumindest, eine IConnectionStringSelector
-Schnittstelle oder etwas ähnliches hinzuzufügen. Sie wollen nicht 20 Bind
-Aufrufe für 20 Repositories haben - Sie möchten eine Abstraktion auf höherer Ebene als das.
Ich würde vorschlagen, dass die beste Lösung darin besteht, dass Sie entweder einen IDataContext
oder einen IDataContextFactory
im Konstruktor anfordern sollten und sich darum sorgen lassen sollten.
Sie könnten die Verbindungszeichenfolge als Konstruktorargument angeben, wenn Sie SqlProductRepository
an die Schnittstelle IProductRepository
binden.
Ich würde einen etwas anderen Ansatz vorschlagen. Zuallererst möchten Sie möglicherweise eine Bindung für die Klasse DataContext
im Kernel erstellen. Sie können dies tun, indem Sie eine Provider-Klasse verwenden, um Ihre DataContext
zu erstellen, indem Sie die Verbindungszeichenfolge als Argument an ihren Konstruktor übergeben. Dann binden Sie die DataContext
an die DataContextProvider
.
Als nächstes ändern Sie den Konstruktor der SqlProductRepository
-Klasse, um stattdessen ein DataContext
-Objekt zu akzeptieren.
Übrigens müssen Sie Ihren Konstruktor nicht mit dem Attribut Inject
dekorieren. Ninject wählt standardmäßig den Konstruktor mit den meisten Parametern aus.
Tags und Links asp.net-mvc linq ioc-container ninject