Я реализую испущенный обработчик свойства для моего объекта POCO, содержащий виртуальные автоматические свойства, и у меня есть код, который работает до того момента, когда исправляется свойствоchanged когда я изменяю базовое свойство. Причиной этого является то, что я делюсь объектом POCO с сервером (лучше или хуже), где я буду отправлять измененные объекты на сервер. Я не могу украсить объект POCO атрибутами (поскольку сервер также будет иметь эти декораторы, поскольку мы разделяем общий класс), и я не могу использовать сторонние инструменты, такие как Fody или PostSharp из-за политик. Мне нужно отслеживать, был ли объект изменен, и я застрял на этом.IL Emit - установить существующее свойство с логическим значением перед notifypropertychanged
Вот Испустите, что оборачивает мое виртуальное авто-свойство с уведомлением об изменениях:
MethodBuilder setMethodBuilder = typeBuilder.DefineMethod(setMethod.Name, setMethod.Attributes, setMethod.ReturnType, types.ToArray());
typeBuilder.DefineMethodOverride(setMethodBuilder, setMethod);
ILGenerator wrapper = setMethodBuilder.GetILGenerator();
...Emit if property <> value IsModified=true here...
wrapper.Emit(OpCodes.Ldarg_0);
wrapper.Emit(OpCodes.Ldarg_1);
wrapper.EmitCall(OpCodes.Call, setMethod, null);
Что мне нужно сделать, это получить набор метода из существующего «IsModified» Логического свойства и установить его, если значение свойства <> значение.
Вот пример того, что я хотел бы, чтобы излучать (это в настоящее время определяется как POCO с виртуальными автомоек свойствами):
public class AnEntity
{
string _myData;
public string MyData
{
get
{
return _myData;
}
set
{
if(_myData <> value)
{
IsModified = true;
_myData = value;
OnPropertyChanged("MyData");
}
}
}
bool _isModified;
public bool IsModified { get; set; }
{
get
{
return _isModified;
}
set
{
_isModified = value;
OnPropertyChanged("IsModified");
}
}
}
Я застрял на этом некоторое время ... Мне удалось создать новое свойство «NewIsModified» в новом созданном прокси-классе, однако мне очень хотелось бы повторно использовать существующее свойство IsModified в моем исходном POCO.
Надеюсь, я правильно объяснил свой вопрос и его легко понять. Любая помощь будет очень признательна, и я надеюсь, что это поможет и кому-то другому.
С уважением.
моно Сесил является приемлемым решением для вас? –