Ihr Code ist nicht sicher, weil Sie eine Instanz registrieren, bevor sie initialisiert wurde.
Wenn Sie Zugriff auf den Container innerhalb einer Komponente haben müssen (was keine gute Idee ist), können Sie eine Abhängigkeit von ILifetimeScope
haben, die Resolve
Methoden haben.
public class ManagmentServiceImp
{
public ManagmentServiceImp(ILifetimeScope scope)
{
}
}
ILifetimeScope
wird automatisch registriert, innerhalb Autofac Sie brauchen keine Registrierung für es hinzuzufügen.
Weitere Informationen finden Sie unter Controlling Scope and Lifetime von Autofac Dokumentation.
Übrigens ist es keine gute Praxis, Abhängigkeiten von Ihrem IoC-Container zu haben. Es sieht so aus, als ob Sie Service Locator Anti-Pattern verwenden. Wenn Sie den Behälter zu faul Lastabhängigkeit benötigen, können Sie Zusammensetzung mit Func<T>
oder Lazy<T>
public class ManagmentServiceImp
{
public ManagmentServiceImp(Lazy<MyService> myService)
{
this._myService = myService;
}
private readonly Lazy<MyService> _myService;
}
In diesem Fall verwenden können, MyService
erstellt werden beim ersten Zugriff auf sie.
Weitere Informationen finden Sie unter Implicit Relationship von der Autofac Dokumentation.
@torvin in welcher Weise wird der Behälter nicht konfiguriert und in welcher Weise dies die Notwendigkeit des OP nicht lösen? –
Entschuldigung, ich habe versehentlich meinen Kommentar entfernt.Es war "Das ist falsch, es wird einen nicht konfigurierten Container registrieren" – torvin
@torvin Sie haben immer noch nicht erklärt, wie dies die Anforderungen des OP nicht erfüllt. –