NHibernate ISessionFactory ломает мою сборку, почему? - PullRequest
0 голосов
/ 26 августа 2010

Когда в моей библиотеке классов C # есть следующий бит кода, он полностью разбивает библиотеку на все остальное.

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

Например, это также относится к этому проекту:

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

Когда я не включаю строку

private static ISessionFactory _sessionFactory;

, все остальное в моем решении может видеть RegionNames.MainRegion.Но как только я делаю какую-либо ссылку на ISessionFactory, она ломается.Эта конкретная библиотека классов по-прежнему компилируется нормально.Я могу добавить его в качестве ссылки в других частях проекта, но, похоже, там ничего нет.

Я получаю сообщение об ошибке

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

Здесь будет полезна любая помощь, этакажется мне действительно странным.

1 Ответ

1 голос
/ 26 августа 2010

Статические классы могут содержать только статические члены.Либо переместите ключевое слово static из класса RegionNames в член MainRegion, либо вообще избавьтесь от static.Это зависит от того, что вы делаете с этим классом.

Для получения дополнительной информации см. Документ MSDN: http://msdn.microsoft.com/en-us/library/79b3xss3(VS.80).aspx

edit: также, если вы хотите сохранить MainRegion как статический, вы 'Мне придется изменить const на readonly.

edit2: сегодня я использовал Reflector для просмотра System.Data.Common.ADP и заметил const без ключевого слова static в статическом классе.В последнем разделе «Статические члены» вышеприведенной ссылки написано:

Хотя поле не может быть объявлено как статическое const, поле const по существу статично в своем поведении.Он принадлежит типу, а не экземплярам типа.Поэтому к константным полям можно получить доступ, используя ту же нотацию ClassName.MemberName, которая используется для статических полей.Экземпляр объекта не требуется.

Однако в нем не говорится, работает ли это внутри статического класса и довольно неоднозначно в его формулировке: не может быть статических членов, const не может быть статическим, нок этому константу можно обращаться, как к статическому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...