Получить информацию о перехваченном Unity методе (Unity Interception, IMethodReturn) - PullRequest
0 голосов
/ 11 ноября 2010

Я использую перехват единства для аудита вызова метода.Все работает отлично: метод перехвачен, и я могу получить имя метода и другие мысли.Я также хочу получить результат моего метода.Например, если мой метод возвращает объект List, я могу получить доступ только к IMethodReturn.ReturnValue, тип которого является объектом.В моем случае базовым типом результата является List, поэтому я могу привести объект возврата IMethodReturn.ReturnValue следующим образом.(Список) IMethodReturn.ReturnValue Проблема: я должен сделать эту работу, когда я не знаю тип возвращаемого значения перехваченного метода.То есть выполнение перехваченного метода иногда может возвращать строковый тип, другой список, другой список и так далее.Возможности огромны.Мне нужен, если возможно, способ преобразования IMethodReturn.ReturnValue в базовый тип возвращаемого значения перехваченного метода.Конечная цель - преобразовать результат метода в xml и сохранить данные в базе данных.Для целей аудита.

Вот код (извините за формат ...)

/// Вызов метода public IMethodReturn Invoke (вход IMethodInvocation, GetNextHandlerDelegate getNext) {IMethodReturn resultData = getNext ()(input, getNext);// Инъекция после выполнения метода.this.InjectionCall (input, resultData);
return resultData;}

// Вот в чем проблема ... private void InjectionCall (вход IMethodInvocation, результат IMethodReturn) {string methodName = input.MethodBase.Name;

// How to get the 
//List<object> resultList = (List<object>)result.ReturnValue   ???
//Type type = resultData.ReturnValue.GetType()

// Calling the audit service. IocFactory is the container helper object.
//IAuditService srvAudit = IocFactory.Resolve<IAuditService>();
//srvAudit.RegisterData(methodName,null,null);

}

Спасибо.

1 Ответ

1 голос
/ 12 ноября 2010

Настоящей проблемой было преобразование объекта, возвращаемого перехваченным методом, а не проблема самого Перехвата. Я решил это путем сериализации объекта в Xml. Решение, которое я нашел, находится по этой ссылке:

Сериализация объекта в XmlDocument

...