Konventionsbindende Bindung von Konstruktor-String-Argumenten mit Ninject

8

Ich verwende Ninject als IoC Container in meinem Projekt. Ich habe folgende Klasse:

%Vor%

In meiner Datei mit den Anwendungseinstellungen habe ich die Verbindungszeichenfolge "someDatabase". Standardmäßig sollte die folgende Konfiguration hinzugefügt werden, um diese Verbindungszeichenfolge in den Konstruktor einzufügen:

%Vor%

Aber ich möchte konventionell basiertes Binding von solchen Strings implementieren. Werte für alle Konstruktorparameter des Stringtyps, deren Name mit "ConnectionString" endet, sollten dem Konfigurationsabschnitt connectionStrings der Anwendung entnommen und automatisch eingefügt werden. Ich möchte ähnliche Konvention für appSettings Abschnitt auch implementieren. Dieser Ansatz wird ausführlicher in Mark Seemans Artikel "Primitive Abhängigkeiten" beschrieben ("Konventionen für Primitive"). Sektion). Castle Windsor Container wurde in Beispielen verwendet.

Ist es möglich, solche Konventionen mit Ninject zu implementieren und was ist der beste Weg, dies zu tun? Ich habe ninject.extensions.conventions bereits ausprobiert, aber es scheint, dass es keine solche Funktionalität hat, oder?

    
Yuriy Morozov 03.09.2012, 08:44
quelle

1 Antwort

1

Es sieht nicht so aus, als ob diese Art von Konventionsbindungen jetzt mit Ninject möglich ist. Ich hatte eine ähnliche Frage hier und der Vorschlag war um eine Schnittstelle zu erstellen, die die Verbindungszeichenfolge zurückgibt und diese als Parameter hat. Das kann jedoch für viele verschiedene Verbindungszeichenfolgen mühsam sein.

Das ist nur ein Gedanke, aber könntest du ein IConnectionStringProvider<T> haben? das könnte Reflexion verwenden, um den Namen von T zu erhalten und die Anwendungseinstellung auf diese Weise nachzuschlagen? Vielleicht so:

%Vor%

Auch wenn das nicht funktioniert, könnten Sie ein nicht-generisches IConnectionStringProvider haben, das einen Typ als Argument verwendet:

%Vor%

Wenn einer davon funktioniert, hätten sie den Vorteil, dass sie mit jedem DI-Container arbeiten sollten.

    
Austin Thompson 21.09.2012 16:57
quelle