Müssen Sie jede Klasse registrieren, bevor der AutoFAC -Container auflösen kann?

StackOverflow https://stackoverflow.com/questions/3413660

  •  26-09-2019
  •  | 
  •  

Frage

Sagen wir dieses Szenario:

public class B {};

public class C
{
     public C(B b){}
}

Um C aus dem AutoFAC -Container aufzulösen, muss ich sowohl B als auch C an Container registrieren. Aber heute habe ich benutzt Einheit, Es scheint, dass ich mir nur B in Container registrieren muss, dann kann C gelöst werden.

AutoFAC kann also nicht wie die Einheit tun?

War es hilfreich?

Lösung

Mit Out-of-the-Box AutoFAC wird erwartet, dass jeder Typ, den Sie verwenden möchten, mit dem Container registriert ist, entweder direkt mit der Register... Methoden oder in großen Mengen verwenden RegisterAssemblyTypes. Aber es gibt auch andere Optionen, schauen Sie sich an Nicholas Artikel über die Lösung von allem. Also ja, Autofac kann das tun, was Einheit tut, aber Sie müssen es aktivieren.

Aktualisieren: Tatsächlich ist die Funktion "Anything" jetzt integriert, und Sie können Folgendes tun:

        var cb = new ContainerBuilder();
        cb.RegisterSource(new AnyConcreteTypeNotAlreadyRegisteredSource());
        return cb.Build();

Mit dem AnyConcreteTypeNotAlreadyRegisteredSource Sie können beide tatsächlich beheben C und B ohne einen von ihnen zu registrieren.

Beachten Sie, dass die Lebensdauer der Dienste von gelöst werden durch AnyConcreteTypeNotAlreadyRegisteredSource wird sein "pro Abhängigkeitsbereich".

Notiz: dieses Thema Drüben in der AutoFAC -Diskussionsgruppe ist verwandt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top