Добрый день.
Как быть если я хочу воспользоваться удобствами EditableObject, но мне нужно реализовать свою логику в свойствах класса и к примеру дополнительно еще реализовать IDataErrorInfo? Т.е. допустим есть сложная валидация в сеттере свойства и установка IDataErrorInfo.Error при необходимости. Как быть с таким свойством? Как сделать чтобы IsDirty работало корректно при изменении такого свойства?
Спасибо за помощь.
Здравствуйте, Аноним, Вы писали:
А>Добрый день. А>Как быть если я хочу воспользоваться удобствами EditableObject, но мне нужно реализовать свою логику в свойствах класса и к примеру дополнительно еще реализовать IDataErrorInfo? Т.е. допустим есть сложная валидация в сеттере свойства и установка IDataErrorInfo.Error при необходимости. Как быть с таким свойством? Как сделать чтобы IsDirty работало корректно при изменении такого свойства? А>Спасибо за помощь.
ручками... все ручками.
хотя, есть один способ антоматизации труда...
абстрактные поля класса "упаковываются" в EditableValue<T> или EditableObjectHolder
рулится это аттрибутами InstanceType или GlobalInstanceType
посмотрите как реализованы EditableValue<T> и EditableObjectHolder
думаю, можно сделать что-то вроде:
public struct MyWrapper<T> : IEditable, IMemberwiseEditable
{
[GetValue, SetValue]
public T Value
{
get { return _current; }
set
{
// some additional code here
_current = value;
}
}
}
public abstract class MyEntity : EditableObject<MyEntity>
{
[InstanceType(typeof(MyWrapper<int>))]
public abstract int SimeValue { get; set; }
}
Re[2]: Вопрос по EditableObject
От:
Аноним
Дата:
20.04.09 16:38
Оценка:
Спасибо за ответ.
Честно говоря думаю что это начинается какое-то извращенство. Да и придется реализовывать интерфейсы, тогда я вообще не вижу смысла наследоваться от EditableObject, если все придется делать самому.
В общем как я понимаю BLToolkit все-таки больше для маппинга данных сделан, а для удобства работы с бизнес-сущностями сделаны только самые простые вещи, работающие только в простых случаях. Я прав?
Здравствуйте, Аноним, Вы писали:
А>В общем как я понимаю BLToolkit все-таки больше для маппинга данных сделан, а для удобства работы с бизнес-сущностями сделаны только самые простые вещи, работающие только в простых случаях. Я прав?
я таки не могу ответить на этот вопрос...
мне вполне хватает того, что предоставляет БЛТ для бизнес-сущностей...
вы скажите толком — чего надо, авось все проще чем кажется
Re[4]: Вопрос по EditableObject
От:
Аноним
Дата:
21.04.09 11:58
Оценка:
Здравствуйте, ili, Вы писали:
ili>я таки не могу ответить на этот вопрос... ili>мне вполне хватает того, что предоставляет БЛТ для бизнес-сущностей... ili>вы скажите толком — чего надо, авось все проще чем кажется
Хотелось бы автоматизировать реализацию IEditableObject и INotifyPropertyChanged, что в общем-то сделано в классе EditableObject. Но получается что использование EditableObject получается только в самых простых случаях, а когда нужно больше контроля (как в моем примере выше) то все становится совсем некрасиво и даже хуже чем если просто самому реализовать эти интерфейсы и все.
Здравствуйте, Аноним, Вы писали:
А>Хотелось бы автоматизировать реализацию IEditableObject и INotifyPropertyChanged, что в общем-то сделано в классе EditableObject. Но получается что использование EditableObject получается только в самых простых случаях, а когда нужно больше контроля (как в моем примере выше) то все становится совсем некрасиво и даже хуже чем если просто самому реализовать эти интерфейсы и все.
кроме того, что я приводил выше, есть еще возможность сделать все на аспектах (здесь и здесь), и\или допилить кодогенерацию до требуемого уровня (вот тут я нихт не селен, подсказать ничего не могу).
Здравствуйте, Аноним, Вы писали:
А>Спасибо за ответы.
незачто
А>Думаю, что неплохо было бы сделать возможность задавать валидирующий метод удовлетворяющий определенному делегату.
ну тык ни вопрос, реализуете своего наследника от ValidatorBaseAttribute, реализуете в нем метод IsValid(ValidationContext context), коий и вызывается при валидации. перегружаете GetErrorMessage(ValidationContext context) для получения сообщения об ошибке, ну и всё...
а что уж там в IsValid делается, это на ваше усмотрение