2010-08-26 4 views
0

Lorsque j'ai le code suivant dans ma bibliothèque de classes C#, cela casse complètement la bibliothèque pour tout le reste.NHibernate ISessionFactory brise mon assemblage, pourquoi?

namespace DesktopOCA.Infastructure 
{ 
    public class NHibernateHelper 
    { 
     private static ISessionFactory _sessionFactory; 
    } 
} 

Par exemple ceci est également dans ce projet:

namespace DesktopOCA.Infastructure 
{ 
    public static class RegionNames 
    { 
     public const string MainRegion = "MainRegion"; 
    } 
} 

Quand je n'inclure le tout en ligne

private static ISessionFactory _sessionFactory; 

autre dans ma solution peut voir RegionNames.MainRegion. Mais dès que je fais référence à un ISessionFactory, il se brise. Cette bibliothèque de classes particulière se compile bien. Je peux l'ajouter comme référence dans d'autres parties du projet, mais c'est comme s'il n'y avait rien là.

Je reçois l'erreur

Error 40 The name 'RegionNames' does not exist in the current context  

Toute aide serait vraiment appréciée ici, cela me semble vraiment bizarre.

+0

Cela ressemble à l'une de ces situations bizarro "Clean and Rebuild". Avez-vous essayé d'examiner la DLL de la bibliothèque de classes avec Reflector? –

Répondre

1

Les classes statiques ne peuvent contenir que des membres statiques. Déplacez le mot-clé static de la classe RegionNames vers le membre MainRegion ou supprimez-le complètement. Cela dépend de ce que vous faites avec cette classe.

Voir la doc MSDN pour plus d'informations: http://msdn.microsoft.com/en-us/library/79b3xss3(VS.80).aspx

modifier: aussi, si vous voulez garder MainRegion comme statique, vous devrez changer const en lecture seule.

edit2: J'utilisais Reflector aujourd'hui pour regarder System.Data.Common.ADP et j'ai remarqué const sans le mot-clé static dans la classe statique. La dernière section « Membres statique » du lien ci-dessus dit:

Bien qu'un champ ne peut pas être déclarée comme const statique, un champ const est essentiellement statique dans son comportement. It appartient au type, pas aux instances du type. Par conséquent, les champs const sont accessibles en utilisant la même notation ClassName.MemberName que utilisée pour les champs statiques. Aucun objet n'est requis.

Il n'a pas, cependant, dire si cela fonctionne dans une classe statique et est assez ambiguë dans son libellé: il ne peut pas être membres statiques, const ne peut pas être statique, mais const est accessible comme si elle est statique.

Questions connexes