2010-11-13 5 views
1

J'ai un singleton et quand je l'appelle de mes UnitTest je reçoisTypeInitializationException dans mon singleton. Comment puis-je le réparer?

"System.TypeInitializationException était non gérée par le code utilisateur message = Le initialiseur de type pour « mycompany.class'threw une exception"

public sealed class MySingleton 
{ 

    private static MySingleton instance = new MySingleton(); 

    private MySingleton() 
    { 
    ConnectionString = GetConnectionstring(); 
    } 

    public static MySingleton NewConnectivity 
    { 
    get { return instance ?? (instance = new MySingleton()); } 
    } 

    public string ConnectionString { get; set; } 

    private static string GetConnectionstring() 
    { 
    return "bla"; 
    } 
} 
+0

Je pense que nous pourrions avoir besoin de voir un peu plus de code ... –

+1

Où est 'mycompany.class'? –

+0

Quelle est la InnerException de TypeInitializationException? –

Répondre

2

Je ne vois pas grand chose de ce qui est là ... Bu si vous avez un initialiseur de champs statique, pourquoi la propriété doit-elle vérifier null? En fait, je suspect cela est dû au champ initialiseur en cours d'exécution avant autre code dans le constructeur statique etc.

Je voudrais essayer de retirer le champ initialiseur - mais notez que sans cela, il y a un cas de bord (temps/fil -race) qui pourrait entraîner la création de plus d'un objet. Si ce n'est pas acceptable, il y a beaucoup de façons d'éviter cette course.

+0

Pourrait-il appeler 'GetConnectionstring()' "avant qu'il n'existe", puisque "initialiseur de champ est en cours d'exécution * avant * l'autre code"? Si une 'NullReferenceException' est déclenchée, cela peut expliquer' TypeInitializationException'. – Patrick

1

Un TypeInitializationException se produit lorsque votre constructeur statique dans la classe "mycompany.class" génère une exception. Essayez de mettre un point d'arrêt dans votre constructeur statique et entrez dans chaque appel? Avez-vous une autre exception dans ce cas?

Questions connexes