Je rencontre un problème ici où un constructeur statique d'une de mes classes est appelé avant de pouvoir être. (C'est-à-dire que di / ioc n'est pas configuré et que vous obtenez NULL / exceptions à partir du localisateur de services). P>
Je n'ai malheureusement pas beaucoup de contrôle sur le constructeur statique, ne me demandez pas pourquoi cela s'appuie sur DI / IOC à être mis en place, mais c'est. P>
Dans mon application, rien ne devrait faire référence à cette classe statique ou autrement avant que mon CIO soit prêt à partir, mais le constructeur statique exécute quand même. p>
Y a-t-il un moyen facile de déterminer quelle ligne a entraîné une exécution du constructeur?
5 Réponses :
Comme toujours, utilisez:
@Aren: Vous pouvez toujours écrire un code dans le fichier global.asax code>; p
Vous n'avez aucun contrôle sur lorsque le constructeur statique est exécuté.
Déplacez tout ce que vous faites de votre constructeur à une fonction statique Vérifiez ce lien < / p>
Les constructeurs statiques ont les suivants p>
Propriétés: P>
Un constructeur statique est appelé
automatiquement pour initialiser la classe
avant la création de la première instance
ou des membres statiques sont référencés. P>
Un constructeur statique ne peut pas être appelé
directement. P>
L'utilisateur n'a aucun contrôle lorsque le
Le constructeur statique est exécuté dans le
Programme. P>
blockQuote>
blockQuote>
Oui, j'ai compris autant. Malheureusement, je traite du code que je n'ai pas écrit ici> _>
Oui, finalement, vous avez confirmé ce que je soupçonné. C'est à dire. Cette approche n'est vraiment pas la bonne. Je vais devoir voir quel effet de levier je dois changer la classe en question. Merci :)
Cela pourrait être fait en utilisant WINDBG et SOSEX. Voici le code exemple et voici les étapes p> Voici la sortie de hth p> p> p> p> P>
.charger SOSEX CODE> LI>
! mbm
* CODE.TEST..CCTOR * CODE> LI>
! MK code> pour obtenir le
CallStack LI>
ol>
! MK code> pour l'échantillon ci-dessus p>
Peut-être que vous devriez passer à l'aide de constructeur statique? Est-ce nécessairement?
Ci-dessous est mon expérience de débogage de constructeur statique, em> p>
Quand j'essayais de déboguer en plaçant un point d'arrêt sur la ligne où le champ statique avait référencé, je ne recevais pas de contrôle de débogage sur le constructeur statique. P>
Je n'ai gardé l'arrêt d'arrêt sur l'entrée du constructeur statique, supprimé le point d'arrêt de la ligne où le champ statique avait référencé fort>. Maintenant, le contrôle de débogage a commencé à entrer dans le code du constructeur statique. P>
Cette image indique comment votre éditeur avec points d'arrêt ressemblerait à p>
+1 Cela a fonctionné pour moi (apparemment le point d'arrêt doit être sur le support d'ouverture du constructeur ... Cela est vrai même lorsque le constructeur n'est pas statique, mais vous l'avez fait privé afin de mettre en œuvre le modèle Singleton).
Merci, cela aide.