Müssen Sie jede Klasse registrieren, bevor der AutoFAC -Container auflösen kann?
-
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?
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.