2009-12-02 7 views
5

In meiner ewigen Suche, weniger zu saugen, prüfe ich zurzeit mvc Turbine, um die IoC schmutzige Arbeit zu tun.
Ich benutze das mvc Turbine nerd Abendessen Beispiel als eine Führung und die Dinge sehen eher logisch bis jetzt. Obwohl ich hier auf das Turbinenprojekt verweise, vermute ich, dass die Philosophie dahinter etwas allgemeines zum Muster ist. Sicher für einige Lesungen und den seltenen Podcast, ich bin neu im IoC-Konzept und habe ein paar Fragen.Wo sind Dinge wie Connectionstrings in einem IoC-Muster zu halten?

Bisher habe ich einen IServiceRegistration Eintrag für jede IRepository Ich möchte
Zum Beispiel registrieren:

public class UserRepositoryRegistration : IServiceRegistration 
{ 
    public void Register(IServiceLocator locator) 
    { 
     locator.Register<IUserRepository, UserRepository>(); 
    } 
} 

Die konkrete Umsetzung des IUserRepository obwohl einige Konfiguration benötigt. So etwas wie eine Verbindungszeichenfolge oder in diesem Fall ein Pfad zur zu verwendenden db4o-Datei.

Wo und an wen sollte ich diese Informationen liefern?

Antwort

3

Sowohl Robert als auch Lucas trafen mit ihren Antworten den Nagel auf den Kopf. Alle "Extras" für das Konto würden in der UserRepository-Klasse enthalten sein. Dies ist derzeit die Art und Weise, wie die Turbine ND implementiert wird.

jedoch nichts hält von Ihnen Erstellen einer neuen Klasse namens ConnectionStringProvider, die dann in Ihrem UserRepository ‚injiziert‘ werden, die die Verbindungszeichenfolge bereitstellen wird (ob es hart oder aus einer Konfigurationsdatei gelesen codiert werden.

Die Code kann wie folgt lauten:.

public class ConnectionStringProvider { 
    public string ConnectionString { 
     get{ 
      // your impl here 
     } 
    } 
} 

public class UserRepository { 
    public UserRepository(ConnectionStringProvider provider){ 
     // set internal field here to use later 
     // with db connection 
    } 
} 

Von hier aus können Sie eine Anmeldung für ConnectionStringProvider innerhalb UserRepositoryRegistration Klasse hinzufügen und Turbine wird den Rest für Sie erledigen

+0

Danke, das ist eine gute Lösung Obwohl es mi. ght scheint zunächst übergeordnet zu sein, ich habe derzeit meine connectionstrings in web.config-Dateien, aber es wird geplant, alle Konfigurationen all unserer Anwendungen in einer Datenbank zu haben und den Anwendungen nur einen Verweis auf diese Datenbank zu geben. Ich würde dann bevorzugen, dass die Konfigurationssachen steckbar sind. –

+0

Danke auch für die Anmeldung, um dies zu beantworten. Hoffe, Sie genießen Ihren Aufenthalt in SO –

2

Im Allgemeinen ist dies ausschließlich das Anliegen des konkreten UserRepository, das die Verbindungszeichenfolge oder den Datenbankpfad benötigt. Sie würden gut tun, indem Sie den Pfad in der Anwendungskonfigurationsdatei löschen und Ihr konkretes Repository die Konfigurationsdaten direkt herausziehen lassen.

Nicht alle Repositories benötigen diese Informationen, was einer der Gründe ist, warum Sie die Abstraktion überhaupt haben. Zum Beispiel erfordert ein schnelles IUserRepository im Speicher keinen Pfad zur Datenbank oder wahrscheinlich keine zusätzliche Konfiguration.

1

Ähnlich wie Robert, würde ich empfehlen, dies in die Anwendungskonfigurationsdatei zu setzen, jedoch mit spezifischen Einträgen für jeden Injektionstyp. Auf diese Weise können Sie Ihre Verbindungszeichenfolge oder den Pfad bei jeder Injektion anpassen.

Verwandte Themen