Ninject Sitzungsumfang Konzept in MVC3

8

Ich baue eine MVC3-App mit dem Ninject-Framework. Ich habe einen Service, der zeitaufwendig zu initialisieren ist, und am Ende wird dieser Dienst ein Objekt haben, das benutzerspezifische Informationen enthält, dann muss ich diesen Dienst wiederverwenden, solange die Benutzersitzung aktiv ist, so dass ich kann vermeiden, diesen Dienst immer wieder zu initialisieren

Also meine Frage ist

Wenn ich den Dienst unter Verwendung von Ninject binde, welche Art von Bereich sollte ich wählen, gibt es keine Sitzung pro Bereich in Ninject, also, was ist der beste Weg, um die Anforderung zu implementieren? Oder bin ich überhaupt in eine falsche Richtung gegangen?

Ich habe einen benutzerdefinierten Anbieter für einen meiner Dienste erstellt, der den Dienst basierend auf den Benutzernamendetails erstellt, die vom aktuellen Controller.User.Identity.Name abgerufen werden. Der folgende Code funktioniert nicht, weil die lokale Variable userName fehlt. Wie kann ich den Benutzernamen über Ninject an meinen benutzerdefinierten Provider übergeben, damit ich ihn von IContext abholen kann?

%Vor%     
Ming 04.05.2012, 08:20
quelle

3 Antworten

2

Ich entscheide mich, einen benutzerdefinierten Provider für das Erstellen der Instanz zu verwenden und in dem benutzerdefinierten Anbieter, den ich überprüft habe, ob er in der Sitzung vorhanden ist oder nicht.

Die Bindung erfolgt wie folgt

%Vor%

Der benutzerdefinierte Anbieter ist unter

%Vor%     
Ming 09.05.2012, 15:44
quelle
7

Ein Sitzungsumfang wird in Ninject absichtlich nicht angeboten, da es in fast jeder Situation falsch ist, Dienste in einem Sitzungszustand zu haben. Sie sollten den Sitzungszustand sehr sorgfältig verwenden, da dies viele Nachteile mit sich bringt.

Versuchen Sie, eine zustandslose Anwendung an erster Stelle zu haben.

Wenn es einen guten Grund dafür gibt, Daten im Sitzungsumfang zu haben, dann legen Sie diese Daten (nicht die Dienste) in den Sitzungszustand und verwenden Dienste in Singleton-, Transienten- oder Anforderungsumfang für die Verarbeitung (Trennung von Daten und Funktionalität) .

    
Remo Gloor 04.05.2012 11:04
quelle
0

Okay, Sie können die Benutzerinformationen in Ihrer Anwendung zwischenspeichern / speichern und nur dann den externen Dienst aufrufen, wenn Sie (aktuelle) Benutzerinformationen nicht haben. In Ihrem User Information Retrieval "Layer" programmieren Sie einfach diese beiden Möglichkeiten.

Wo Sie zwischenspeichern, liegt es ganz bei Ihnen. Sie können diese Informationen beispielsweise in einer lokalen Datenbank speichern.

Anscheinend habe ich dich falsch verstanden, meine Entschuldigung (unter meiner ursprünglichen Antwort).

  

Sie können zum Beispiel eine (abstrakte) Fabrik verwenden, die eine statische enthält   Mitglied Ihres Dienstes (zum Beispiel), damit es wiederverwendet wird.

     

Obwohl dies von Ihrem Dienst abhängt, könnte dies eine unerwünschte Seite haben   Effekte (Ich habe dies einmal mit Data Services und in einem ASP.NET MVC3 getan   Anwendung meines Datenkontexts war irgendwie aufgrund einiger Magie, dass geschraubt   passiert). Alles was ich damit sagen will ist: sei vorsichtig und teste es   gut.

    
Styxxy 04.05.2012 08:24
quelle

Tags und Links