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 ?
welche Möglichkeit würdet ihr benutzen bzw. Nutzt ihr schon ?
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
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 ?)
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
P.S:
Abrufen kannste sie dann wieder mit System.Environment.GetEnvironmentVariable("USERID");
"It is not wise to be wise" - Sun Tzu
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 ?
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
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
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();
}
danke für eure Antworten
werde höchstwahrscheinlich eine statische Klasse benutzen und die Settings im Isolated Storage auf jeder einzelnen Machine speichern