2008-12-04 5 views
2

У меня есть класс с внутренним свойством:Доступ к внутреннему свойство из объема сборки

internal virtual StateEnum EnrolmentState 
{ 
    get { ..getter logic } 
    set { ..setter logic } 
} 

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

public StateEnum GetCurrentState() 
{ 
    return EnrolmentState; 
} 

Но когда я называю этот метод из класса вне этой сборки я получаю исключение

(System.TypeLoadException: Method 'get_EnrolmentState' on type 'EnrolmentAopProxy' from assembly '44fe776f-458e-4c5d-aa35-08c55501dd43, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is overriding a method that is not visible from that assembly.)

Таким образом, можно получить доступ к внутреннему члену за пределами сборки каким-либо образом, или я должен рассмотреть другой подход.

Просто отметим, что этот класс используется как объект сопоставления O/R (NPersist), и он переопределяется из модуля отображения O/R для ввода кода сохранения.

+0

Это ваш точный код? Поскольку EnrolmentState не указан в указанном коде, но * is * указан в журнале. – 2008-12-04 08:48:58

ответ

1

Почему собственность внутренняя в первую очередь? Если вы хотите иметь открытый доступ к нему, сделайте его общедоступным. Я предполагаю, что у вас есть некоторый контроль над этим, так как в противном случае вы не сможете добавить публичный метод для доступа к нему в первую очередь.

Если вы хотите, чтобы выбранные другие узлы имели к нему доступ, InternalsVisibleTo - ваш друг (каламбур не предназначен) - но, как говорит Эрик, вы должны подумать о дизайне в этот момент.

Что касается того, почему вы получаете эту конкретную ошибку, похоже, ваш прокси-сервер AOP все еще пытается переопределить внутреннее свойство, а не использовать ваш общедоступный метод. Трудно узнать, можете ли вы изменить это, не зная больше о вашей конкретной настройке, но сделать публичную собственность скорее всего проще.

0

Похоже, вы должны пересмотреть свой выбор дизайна. Внутренний используется, чтобы избежать того, что вы пытаетесь сделать, поэтому рассмотрите возможность использования своего рода открытого доступа к свойствам.

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

0

Да, я согласен, что это странный дизайн. Я поеду с защищенным модификатором, так как атрибут InternalVisibleTo не работает для меня.

Смежные вопросы