В текущей версии объект Target может быть назначен только при создании AuditScope
, которым вы не управляете при использовании расширения Audit.Mvc
.
Конечно, вы можете сделать это вручную вот так:
[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
SetTargetObject(leaveRequest);
// ... I guess here the leaveRequest object is modified
leaveRequest.SomeProp = "NewValue";
UpdateTargetObject(leaveRequest);
}
private void SetTargetObject(object value)
{
var scope = this.GetCurrentAuditScope();
scope.Event.Target = new AuditTarget
{
SerializedOld = scope.DataProvider.Serialize(value),
Type = value.GetType().Name
};
}
private void UpdateTargetObject(object value)
{
var scope = this.GetCurrentAuditScope();
scope.Event.Target.SerializedNew = scope.DataProvider.Serialize(value);
}
Я предоставлю способ переназначения Получателя цели в следующей версии библиотеки (очень скоро), так что этот вид использования может быть упрощен.
Но если вам нужна только одна версия объекта leaveRequest
, вы можете просто использовать Настраиваемое поле :
[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
this.GetCurrentAuditScope().SetCustomField("LeaveRequest", leaveRequest);
// ...
}
Обновление
Запускв версии 14.2.1 библиотека предоставляет метод SetTargetGetter(Func<object>)
для AuditScope
для обновления целевого метода получения (функция, которая возвращает целевой объект для аудита).
Так что первый пример теперь можно упроститькак:
[Audit]
public ActionResult CreateLeavePrerequest(LeaveRequest leaveRequest)
{
this.GetCurrentAuditScope().SetTargetGetter(() => leaveRequest);
// ...
leaveRequest.SomeProp = "NewValue";
}