Auflösen von Hangfire-Abhängigkeiten / HttpContext in .NET Core Startup

9

Ich habe Hangfire in der Startup-Klasse meiner .NET Core-Webanwendung wie folgt installiert und konfiguriert (mit einer großen Menge des entfernten Hangfire-Codes):

%Vor%

Wie Sie sehen können, verwende ich Autofac für DI. Ich habe Dinge eingerichtet, um bei jeder Ausführung des Hangfire-Jobs einen neuen Container hinzuzufügen.

Momentan habe ich UseHangfireDashboard() sowie den Aufruf, meinen wiederkehrenden Job hinzuzufügen, auskommentiert und erhalte den folgenden Fehler in der Zeile, die auf IPrincipal verweist:

  

System.NullReferenceException: 'Objektverweis nicht auf eine Instanz eines Objekts gesetzt.'

Ich verstehe, dass Hangfire kein HttpContext hat. Ich bin mir nicht wirklich sicher, warum es überhaupt diese Codezeile für den Hangfire-Thread auslöst. Ich werde schließlich ein Dienstkonto für meine IPrincipal Abhängigkeit auflösen müssen.

Wie kann ich mein Problem mit Hangfire und HttpContext beheben?

    
im1dermike 18.05.2017, 17:41
quelle

3 Antworten

2
  

Das Hauptproblem, das ich jetzt habe, ist, wenn ich UseHangfireServer, ich   dann muss auch HttpContext aufgelöst werden

Hier gefunden Verwenden von IoC-Containern

  

HttpContext ist nicht verfügbar

     

Während der Instantiierung von a sind keine Informationen zur Anfrage verfügbar   Zieltyp. Wenn Sie Ihre Abhängigkeiten in einem Anforderungsbereich registrieren   ( InstancePerHttpRequest in Autofac, InRequestScope in Ninject und so   on), wird während des Jobaktivierungsprozesses eine Ausnahme ausgelöst.

     

Daher sollte das gesamte Abhängigkeitsdiagramm verfügbar sein . Entweder registrieren   zusätzliche Dienste ohne Verwendung des Anforderungsbereichs oder separate Verwendung   Instanz des Containers, wenn Ihr IoC-Container dies nicht unterstützt   Abhängigkeitsregistrierungen für mehrere Bereiche.

Das Auflösen von Bereichsabhängigkeiten in .net core würde eine Anforderung erfordern, die beim Starten und Registrieren von Jobs nicht verfügbar ist. Stellen Sie daher sicher, dass Ihr Dienst, der für die Aktivierung während des Systemstarts benötigt wird, nicht mit Gültigkeitsbereichen für Bereiche registriert ist.

%Vor%

Es bleibt nur noch übrig, die Anwendung so zu konfigurieren, dass sie diesen Service mit dem wiederkehrenden Job verwendet,

%Vor%

Referenzen

Hangfire 1.6.0

HangFire mit ASP.NET Core integrieren

Verwenden von IoC-Containern

    
Nkosi 29.05.2017 11:50
quelle
1
  

Warum versucht Hangfire, die .NET Core-Startup-Klasse aufzulösen?

Hangfire speichert keine Lambda-Ausdrücke in der Datenbank, es speichert den Typ und die Methode, die aufgerufen werden. Wenn dann die geplante Aufgabe ausgeführt werden soll, löst sie den Typ aus dem Container auf und ruft die Methode auf.

In Ihrem Fall ist die Methode auf Startup .

Sie können Startup mit Autofac registrieren, wenn Sie möchten, aber es ist wahrscheinlich am einfachsten, einen geplanten Aufgabenservice zu haben:

%Vor%     
ta.speot.is 24.05.2017 13:28
quelle
0

Ich bin nicht sicher über den Typ für den Jobmanager, aber Sie können die Abhängigkeit vom Container mithilfe eines Bereichs lösen. Sie sollten den Gültigkeitsbereich in einer using-Anweisung auflösen, um Speicherlecks zu vermeiden. Weitere Informationen finden Sie in den Autofac-Dokumenten

%Vor%     
Kevin R. 18.05.2017 23:00
quelle