Die Registrierung einer Art mit mehreren Konstruktoren und string-Abhängigkeit in Einfachen Injektor
Ich versuche, herauszufinden, wie zu verwenden, Einfache Injektor, ich habe es verwendet um das Projekt ohne Probleme bei der Registrierung und einfache Dienstleistungen und deren Komponenten.
Jedoch wollte ich mit dependency injector, wenn eine Komponente mit mehr als zwei Konstruktoren, die eine Schnittstelle implementiert.
public DAL: IDAL
{
private Logger logger;
string _dbInstance;
public DAL()
{
logger = new Logger();
}
public DAL(string databaseInstance)
{
logger = new Logger();
_dbInstance = databaseInstance;
}
}
Hier ist, wie ich bin registrieren der Dienste:
container.Register<IDAL, DAL>();
den code ausführt, das ist der Fehler, der in passiert:
Für die container zu schaffen, DAL, sollte es genau enthalten
einen öffentlichen Konstruktor, sondern es hat 2.
Nach dem entfernen der Konstruktor, der nächste Fehler ist, dass es nicht zulassen, dass mein Konstruktor akzeptiert einen parameter.
Den Konstruktor des Typs DAL enthält parameter 'databaseInstance' von
der Typ String kann nicht verwendet werden, für die constructor injection.
Gibt es eine Möglichkeit, wo ich tun kann, dependency injection, wo die Klasse hat mehr als 2 öffentlichen Bauherren? Oder mit einem public Konstruktor, der einen parameter akzeptiert?
Ich die Dokumentation zu Lesen hier: SimpleInjector (Erste Schritte)
Dokument beginnt einfach zu verstehen, aber es wird exponentiell komplexer und ich habe eine harte Zeit versucht zu entschlüsseln, wenn jede der letzteren Beispiele, die Sie erwähnen, beziehen sich auf meine Ausgabe.
- Schreiben Sie etwas wie
container.Register<IDAL, DAL>(() => new Dal("databaseInstance"));
- Hallo, vielen Dank für die Antwort, aber ich erhalte eine Fehlermeldung, die sagt "kann nicht konvertieren lambda-Ausdruck zum Typ "SimpleInjector.Lifestyle", weil es keine Stellvertretung geben.
- Hey modifiziert den code.. und ich hab irgendwo: container.Registrieren<IDAL>(() => neue Dal("databaseInstance")); danke! Ich werde halten diese offen, bis ich sicher, dass alles funktioniert reibungslos.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es gibt zwei Dinge über Ihre Klasse, die verhindert, dass Einfache Injektor in der Lage, Sie auf auto-Draht, Ihr DAL-Klasse:
Nemesv fast Recht in seinem Kommentar. Sie können als fallback mit Hilfe eines Delegaten Registrierung wie diese:
Dieser Artikel beschreibt, warum die Anwendung in Komponenten sollte nur einen Konstruktor.
container.Register<IService>(() => new RealService(new SqlRepository()), Lifestyle.Transient);
aber was ist, wenn ich nicht angeben wollennew SqlRepository()
tut es dann gewordencontainer.Register<IService>(() => new RealService(), Lifestyle.Transient);
?Wenn Konstruktor ist auf der Suche nach string-Wert
container.Registrieren Sie(() => neue DAL("db"));
Wenn Konstruktor ist auf der Suche nach einer anderen Klasse