У меня проблема с частными установщиками при использовании NHibernate и отложенной загрузки. Допустим, у меня есть класс, который выглядит так:
public class User
{
public virtual int Foo {get; private set;}
public virtual IList<User> Friends {get; set;}
public virtual void SetFirstFriendsFoo()
{
// This line works in a unit test but does nothing during a live run with
// a lazy-loaded Friends list
Friends(0).Foo = 1;
}
}
Вызов SetFirstFriendsFoo прекрасно работает внутри модульного теста (как и должно быть, поскольку объекты одного типа могут обращаться к закрытым свойствам друг друга ).
Однако при запуске в режиме реального времени со списком друзей, загруженных с отложенной загрузкой, вызов SetFirstFriendsFoo автоматически завершается неудачно. Я предполагаю, что причина этого в том, что во время выполнения объект Users (0) .Foo больше не имеет тип User, а принадлежит прокси-классу, который наследуется от User, поскольку список друзей был загружен с отложенной загрузкой. *
У меня такой вопрос: не должно ли это генерировать исключение во время выполнения? Вы получаете исключения во время компиляции, если пытаетесь получить доступ к закрытым свойствам другого класса, но когда вы сталкиваетесь с такой ситуацией, похоже, что приложение просто игнорирует вас и продолжает свой путь.
Примечание: если я изменю "закрытый набор" на "защищенный набор", все будет работать нормально.