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.
InformationsquelleAutor sksallaj | 2014-01-02
Schreibe einen Kommentar