Laden...

Anwendungsdaten applikationsweit zur Verfügung stellen

Erstellt von CB.NET vor 19 Jahren Letzter Beitrag vor 19 Jahren 2.832 Views
CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 19 Jahren
Anwendungsdaten applikationsweit zur Verfügung stellen

hallo,

ich habe eine Win-App, bei der sich der Benutzer einloggen muss, über einen Dialog

da ich auf mehreren Forms DB-Abfragen mache, wo ich die Benutzernummer benötige(Stichwort: Mandanten), suche ich eine sinnvolle Möglichkeit, z.B. die Benutzer-ID zu speichern ?

der Möglichkeiten gibt es ja viele, aber welche nehme ich ?

  • XML-Config ist mir zu unsicher
  • von Form zu Form übertragen per Observer-pattern
  • Speichern im Isolated Storage- ebenfalls Sicherheitsbedenken, da im Klartext gespeichert wird

welche Möglichkeit würdet ihr benutzen bzw. Nutzt ihr schon ?

L
667 Beiträge seit 2004
vor 19 Jahren

Du könntest eine EnvironmentVariable setzen und die vorm beenden der Anwendung wieder löschen. Weitere Möglichkeit wäre eine statische Variable oder eine Singleton-Klasse an geeigneter Stelle. Wie gesagt, Möglichkeiten gibts unendlich viele....

"It is not wise to be wise" - Sun Tzu

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 19 Jahren

ok, die meisten anwendungen, die ich bisjetzt angesehen habe, übergeben die userID( wichtig für Berechtigung auf Anwendungsebene) einfach von Form zu Form weiter( jede Form ist abgeleitet von einer Baseform, wo die UserID als Eigenschaft gesetzt wird), aber damit (Baseform) gibt es halt Probs mit dem VS-Designer.

Wie meinst du das als EnvironmentVariable ( hast du ein Beispiel zur Hand ?)

L
667 Beiträge seit 2004
vor 19 Jahren

Environment-Variable setzen :



using System.Runtime.InteropServices;

...

[DllImport("kernel32.dll",CharSet=CharSet.Auto, SetLastError=true)]
[return:MarshalAs(UnmanagedType.Bool)]
public static extern bool SetEnvironmentVariable(string varName, string varValue);


...

SetEnvironmentVariable("USERID", "12345");

Das wäre zwar nur eine Environment-Variable die innerhalb des Prozesses und aller Kindprozesse gültig wäre, aber das würde ja für Deine Problemstellung reichen.

"It is not wise to be wise" - Sun Tzu

L
667 Beiträge seit 2004
vor 19 Jahren

P.S:

Abrufen kannste sie dann wieder mit System.Environment.GetEnvironmentVariable("USERID");

"It is not wise to be wise" - Sun Tzu

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 19 Jahren

ok, danke:

das heisst ich müsste vor dem DLL-Import die UserID aus der DB holen und per SETEnvironment setzen ?

eigentlich sollte es auch keine Probs mit MehrBenutzerAnwendungen geben, da ja wie erwähnt immer pro Instanz ein eigener Prozess läuft ?

L
667 Beiträge seit 2004
vor 19 Jahren

Dem würde ich soweit zustimmen. Es könnte allerdings Probs geben wenn ein Benutzer keine Adminrechte hat. Dann könnte er je nachdem wie die UserRechte eingestellt sind meinen, der Benutzer hätte keine Permission um die Variable zu setzen.

Dazu hab ich aber auch noch nen Codeschnipsel, den poste ich heut Abend, wenn ich daheim bin.

"It is not wise to be wise" - Sun Tzu

F
529 Beiträge seit 2003
vor 19 Jahren

Mach dir eine neue Klasse. In diese kommen alle Varablen wie Userid und so. Natürlich machst du die Variablen statisch. Das funktioniert vielleicht schneller und würde auch unter Mono funzen......

Besuchen sie das VisualC++ - Forum

257 Beiträge seit 2004
vor 19 Jahren

Och benutze für so etwas immer eine globale statische Klasse in der alle globalen
statischen Member enthalten sind. Auf diese Klasse kannst du dann aus jedem
Programmteil zurgeifen.

Hier ein kleines Beispiel:


public class Globals
{
    public static int UserId = -1;

    public static PluginCollection Plugins = new PluginCollection();
}

CB.NET Themenstarter:in
726 Beiträge seit 2003
vor 19 Jahren

danke für eure Antworten

werde höchstwahrscheinlich eine statische Klasse benutzen und die Settings im Isolated Storage auf jeder einzelnen Machine speichern