Frage

Ich habe ein Webapp, die ein Config-Objekt in ApplicationState speichert. Dieses Objekt enthält die Verbindungszeichenfolge in die Datenbank unter anderem.

Manchmal starte ich einen Asynchron-Thread ein paar längere Lauf Aufgaben zu erledigen, wie E-Mails und die Aktualisierung der Datenbank zu senden.

Da jedoch dieser Thread i am Config Objekt erhalten keine Httpcontext haben, können nicht.

Ich weiß, das Design, das alles auf Httpcontext abhängig ist schlecht, aber das ist jetzt zu spät zu ändern. Mit Blick auf Reflektor ich sehe, dass die Httpcontext-Klasse nur eine statische interne Klasse verwendet die ApplicationState zu bekommen. Gibt es eine andere Art und Weise, um es zu bekommen?

All diese internen Klassen in .net sind wirklich ärgerlich.

War es hilfreich?

Lösung

Just passieren, was auch immer Sie Ihren Faden mögen, wenn Sie es starten. Verwenden Sie ein ParameterizedThreadStart Delegat es statt nur ein Thread delegieren. Sie könnten entweder übergeben es HttpContext.Current, sonst bündeln die Informationen, die Sie Ihren Faden haben wollen, und es passieren.

Andere Tipps

Wenn Sie wirklich benötigen Zugriff auf Application State (oder ähnliches) von Asynchron-Handler Sie Ihre HttpApplication Unterklasse ändern sollte (zB Global.asax), um die Application State Instanz zu speichern (this.Application) auf eine statische Eigenschaft während Application_Start:

public static HttpApplicationStateWrapper State { get; private set; }

protected void Application_Start()
{
    State = new HttpApplicationStateWrapper(this.Application);
}

Es wäre besser geeignet sein, einen DI-Framework zu verwenden diese Instanz zu registrieren, aber wenn man zur Hand haben könnten Sie wahrscheinlich die Verwendung von Application State insgesamt zur Speicherung von Konfigurations vermeiden. Des Weiteren gibt es ein Konfigurations-Framework in .NET, die direkt diesen Bedarf adressiert und bietet die Möglichkeit, Konfiguration von überall zu lesen.

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