2011-10-06 4 views
1

J'ai une classe open source assez grande que j'ai besoin de convertir de statique à non-statique.Quelles sont les étapes à suivre pour convertir une grande classe de statique en non statique?

La raison pour laquelle je dois faire ceci est de le rendre sûr; Je veux une copie de la classe par thread.

En général, quelles sont les étapes recommandées pour convertir une bibliothèque C# de statique à non statique?

+0

Hmm, trop générale d'une question. Publiez du code, vous obtiendrez de meilleures réponses. –

+0

's/static // g'' ' – Dani

+0

Ceci est _waaaaaay_ trop large pour être efficacement répondu. Oubliant pour un moment certaines des constructions générales à appliquer, ou supprimées (que je présume, pour l'argument, que vous connaissez déjà), tout le reste est purement circonstanciel à votre scénario (ou un ensemble de tels). C'est-à-dire que vous aurez besoin de plus que d'un moyen de rendre la classe non statique, vous devrez être sûr que le thread est sûr: ce n'est pas seulement une conséquence d'une classe d'instance. –

Répondre

2

J'ai mis à jour Data Layer de statique à aucune classe statique. Alors

1er: supprimer mot-clé « statique » de la classe et la méthode

2: Ajoutez dans votre ancienne classe statique Singleton et

public class Foo 
{ 

    #region Singleton 

    Foo() 
    { 
    } 

    public static Foo Instance 
    { 
     get 
     { 
      return Nested.instance; 
     } 
    } 

    class Nested 
    { 
     static Nested() { } 

     internal static readonly Foo instance = new Foo(); 
    } 

    #endregion 

3: Remplacer dans chaque appel à votre classe Foo .Instance.DoSomething() au lieu Foo.DoSomething

4ème(): compilation et le profit

+0

4ème étape rochers! – D3vtr0n

2

Pour le compiler? Supprimer static de tous les membres devrait le faire.

Si vous voulez quelque chose de plus casher, alors vous devriez prendre des paramètres communs à tous les appels et les déplacer dans le constructeur.

Cela me semble assez simple. Avez-vous un problème particulier avec cela?

2

Je pense que ce que vous dites est que c'est une grande classe, il Il n'est pas facile de visualiser comment le faire en une seule fois, alors vous vouliez suivre quelques étapes. Ici va:

  1. Convertir Singleton
  2. Vous aurez besoin de corriger les endroits qui font référence à la classe statique, en remplaçant chaque terme MyClass avec le getter MyClass.instance() singleton. Gardez une liste de tous ces endroits afin que vous puissiez les revisiter facilement.
  3. Dans tous les endroits que vous avez trouvés, déterminez la meilleure façon d'utiliser la dépendance: injectez le MyClass.instance() au lieu de vous y référer globalement en utilisant le MyClass.
  4. Annulez la singularisation de votre classe en canonique. Le travail DI que vous avez fait devrait faciliter l'échange du getter singleton à un constructeur normal.
  5. Maintenant, commencez à utiliser plus d'une instance à la fois et corrigez les problèmes de concurrence avancés qui en résultent.

Exécutez votre infrastructure de test entre chaque étape.

Questions connexes