hangfire-autofac

___ answer44159803 ___
  

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 %code% .

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

%Vor%     
___ tag123c ___ C # (sprich "Cis") ist eine objektorientierte Programmiersprache auf hohem Niveau, die zum Erstellen einer Vielzahl von Anwendungen entwickelt wurde, die auf dem .NET Framework (oder .NET Core) ausgeführt werden. C # ist einfach, leistungsfähig, typsicher und objektorientiert. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___ tag123autofac ___ Autofac (http://autofac.org) ist ein Inversion Control (IoC) -Container für Microsoft .NET. Es verwaltet die Abhängigkeiten zwischen Klassen, sodass Anwendungen leicht geändert werden können, wenn sie an Größe und Komplexität zunehmen. Dies wird erreicht, indem reguläre .NET-Klassen als Komponenten behandelt werden. ___ qstnhdr ___ Auflösen von Hangfire-Abhängigkeiten / HttpContext in .NET Core Startup ___ qstntxt ___

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 %code% sowie den Aufruf, meinen wiederkehrenden Job hinzuzufügen, auskommentiert und erhalte den folgenden Fehler in der Zeile, die auf %code% verweist:

  

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

Ich verstehe, dass Hangfire kein %code% 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?

    
___ tag123hangfire ___ Hangfire ist ein Open-Source-Framework, mit dem Sie Ihre Hintergrundjobs in .NET Framework und .NET Core erstellen, verarbeiten und verwalten können. ___ answer44059053 ___

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%     
___ tag123hangfireautofac__ hilf uns dabei, dieses Wiki zu bearbeiten ___ answer44241812 ___
  

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

Hier gefunden Verwenden von IoC-Containern

  

%code% 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   ( %code% in Autofac, %code% 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

    
___
3
Antworten

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

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 eing...
18.05.2017, 17:41