So registrieren Sie eine benannte Instanz mit Einfach Injektor
Entwickle ich eine WinForm-Anwendung und ich bin mit Repository-Muster , ich bin mit Servicestack OrmLite für den Datenzugriff und die Einfache Injektor für das IoC.
In meinem Programm.cs ich habe 2 register 2 verschiedene OrmLiteConnectionFactory
aber derzeit bin ich nicht in der Lage, da kann ich nicht registrieren, namens... mit FunQ ich kann dies mit
container.Register<IDbConnectionFactory>("db1", _ => new OrmLiteConnectionFactory(
ConfigurationManager.ConnectionStrings["db1"].ConnectionString,
SqlServerDialect.Provider));
container.Register<IDbConnectionFactory>("db2", _ => new OrmLiteConnectionFactory(
ConfigurationManager.ConnectionStrings["db2"].ConnectionString,
SqlServerDialect.Provider));
hier ist mein Programm.cs Bootstrap-Methode
private static void Bootstrap()
{
//Create the container as usual.
Container = new Container();
string conn1 = ConfigurationManager.ConnectionStrings["dbconn1"].ConnectionString;
string conn2 = ConfigurationManager.ConnectionStrings["dbconn2"].ConnectionString;
OrmLiteConnectionFactory connectionFactory = new OrmLiteConnectionFactory(conn1,
ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider.Instance);
Container.RegisterSingle<OrmLiteConnectionFactory>(connectionFactory1);
OrmLiteConnectionFactory connectionFactory2 = new OrmLiteConnectionFactory(conn2,
ServiceStack.OrmLite.SqlServer.SqlServerOrmLiteDialectProvider.Instance);
//how do I register this one without a name?
Container.RegisterSingle<OrmLiteConnectionFactory>(connectionFactory2);
Container.Register<MainForm>();
}
Vielen Dank im Voraus
- Wie ist die Anwendung mit diesen
OrmLiteConnectionFactory
Instanzen? Wie sollte die Applikation verschiedene zwischen den beiden? Wer sind Sie beabsichtigen, eine oder die andere? Diese Fabriken Punkt, an der Datenbanken mit dem gleichen schema? - ja die OrmLiteConnectionFactory dienen in verschiedenen repositories... also ich erwarte auf meine Repo1 zu beheben connectionFactory und auf einem anderen Repo2 zu beheben connectionFactory-2
- Diese repositories Verbindung zu Datenbanken herstellen, haben das gleiche schema, oder sind diese Schemata unterscheiden?
- ja ,ich muss auf verschiedene Datenbanken thats, warum ich mich registrieren 2 verschiedene Instanz einer OrmLiteConnectionFactory
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da haben Sie zwei verschiedene Datenbanken mit jeweils einem anderen schema, die unterschiedliche
OrmLiteConnectionFactory
sind nicht austauschbar. Dies bedeutet, dass, wenn Sie Sie tauschen um, Ihr system wird nicht mehr funktionieren. Das ist ein Hinweis darauf, dass Sie brechen die Liskov-Substitution-Prinzip. Also die Allgemeine Lösung in diesem Fall liegt darin, dass jedes Werk seine eigene Oberfläche und lassen Sie jedes repository davon abhängen, dass bestimmte Schnittstelle. Das können Sie registrieren Sie einzigartig und lassen Sie den container auflösen der Objekt graph ohne Zweifel.Geben, wenn jedes Werk seine eigene Abstraktion ist nicht eine option, oder bequem, eine weitere option ist die Registrierung Ihrer Repositorys ohne auto-Verkabelung. Durch die Registrierung Ihres Projektarchivs mit einem Delegierten, Sie sind völlig Kontrolle über, was zu injizieren in Ihr repository. Zum Beispiel:
Eine Dritte Möglichkeit ist die Verwendung Kontext-basierte Injektion, wurden Sie Folgendes tun:
Out of the box Einfach Injektor nicht unterstützt Registrierung keyed Anmeldungen, aber es gibt mehrere Möglichkeiten, dies zu tun, wie Sie erklärt auf dieser Seite. Die Seite erklärt auch, warum es keine integrierte Unterstützung für diese. Dies ist eine bewusste design-Entscheidung.
RegisterWithContext<OrmLiteConnectionFactory>
immer wieder die gleichen Instanzen, weil dieconnectionFactory1
undconnectionFactory2
sind, einmal angelegt. Wenn das ist nicht, was Sie wollen, Sie können neue Instanzen zu erstellen, die in lambda.