2011-12-18 4 views
2

J'essaie d'obtenir ce qui suit:Création d'un objet global?

Lorsqu'un utilisateur a été authentifié avec succès, je dois créer un objet utilisateur global auquel je peux accéder à partir de différents formulaires (ou classes). Je regardais à travers les sources de données disponibles dans VS, et j'ai vu qu'il y a une option "Object" qui peut convenir à ce que j'essaie d'accomplir. Le problème est, je n'ai aucune idée de comment cela fonctionne.

Quelqu'un peut-il me diriger dans la bonne direction?

Merci.

+1

Quelles informations ces différentes "formes ou classes" requièrent-elles de cet "objet utilisateur"? –

+0

juste la capacité de lire (et éventuellement modifier) ​​ses attributs. Via les propriétés. – Nick

Répondre

0

Vous pouvez utiliser ou créer une liste publique en vous assurant que vous n'ajoutez les utilisateurs authentifiés à la liste qu'une fois qu'ils ont été validés, vous pouvez même le faire en encapsulant l'accès au champ, créez une propriété List [] vous demander probablement de créer une propriété de niveau classe.

2

C'est ce qu'on appelle un Singleton, et c'est une mauvaise chose (surtout quand son état peut être muté). Enquêter Dependency Injection (DI) à la place. Il y a même un .NET-specific book dessus.

Par demande, voici un exemple simple (probablement trop simplifié) de faire DI manuellement. Un DI Container library (également connu sous le nom de bibliothèque Inversion of Control ou IoC Container) peut simplifier le processus de «tout câbler» dans la racine de la composition, et fournit généralement également la gestion de la durée de vie et d'autres fonctionnalités.

// Composition root of your application 
void Main() 
{ 
    // Only instance of user we will ever create 
    var user = new User(); 

    var instance = new MyClass(user); 
} 

public interface IUser 
{ 
    string Name { get; set; } 
} 

public class User: IUser 
{ 
    public string Name { get; set; } 
} 

public class MyClass 
{ 
    public MyClass(IUser user) 
    { 
     if (user == null) 
     { 
      throw new ArgumentNullException("user"); 
     } 

     _user = user; 
    } 

    private readonly IUser _user; 
} 
+1

+1 pour l'injection de dépendance. Il peut être utile d'ajouter un bref exemple de la façon de le faire manuellement comme une étape de base, avec une référence à DI automatique via un conteneur IoC comme une alternative avancée. –

4

En supposant que cela est une application Windows Forms, vous pouvez créer une classe utilisateur qui est stocké dans une classe ApplicationState statique.

Étapes:

1) Créer votre classe utilisateur pour contenir des informations sur l'utilisateur:

public class User 
{ 
    public string Login { get; set; } 
    //.. other properties 
} 

2) Créer votre classe ApplicationState:

public static class ApplicationState 
{ 
    public static User CurrentUser { get; set; } 
} 

3) Dans votre processus de connexion , créez une nouvelle version de la classe d'utilisateurs et affectez-la à la propriété ApplicationState.CurrentUser:

public void CompleteLogin(string sLogin) 
    { 
     User user = new User(); 

     user.Login = sLogin; 

     ApplicationState.CurrentUser = user; 
    } 

4) Vous pouvez maintenant utiliser ApplicationState.CurrentUser à peu près n'importe où dans votre projet.