#c# #unity-container #enterprise-library
#c# #unity-контейнер #корпоративная библиотека
Вопрос:
У меня есть иинтерцепция поведения, похожая на удар:
public class TraceBehavior : IInterceptionBehavior
{
public IEnumerable<Type> GetRequiredInterfaces()
{
return Type.EmptyTypes;
}
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
Console.WriteLine(string.Format("Invoke method:{0}",input.MethodBase.ToString()));
IMethodReturn result = getNext()(input, getNext);
if (result.Exception == null)
{
Console.WriteLine("Invoke successful!");
}
else
{
Console.WriteLine(string.Format("Invoke faild, error: {0}", result.Exception.Message));
result.Exception = null;
}
return resu<
}
public bool WillExecute { get { return true; } }
}
Независимо от того, использую ли я это для методов или нет, исключение всегда генерируется. Кто-нибудь может мне помочь?
Ответ №1:
Код выглядит нормально, но вы не показали, как регистрируется перехват и как вызывается объект.
Предполагая, что вызывается перехват, тогда, если бы я предположил, что вызванный метод возвращает тип значения и IMethodReturn.ReturnValue
равен null, что вызывает NullReferenceException
.
Если это так, то, возможно, возврат значения по умолчанию для типа значения решит вашу проблему:
public IMethodReturn Invoke(IMethodInvocation input, GetNextInterceptionBehaviorDelegate getNext)
{
Console.WriteLine(string.Format("Invoke method:{0}", input.MethodBase.ToString()));
IMethodReturn result = getNext()(input, getNext);
if (result.Exception == null)
{
Console.WriteLine("Invoke successful!");
}
else
{
Console.WriteLine(string.Format("Invoke faild, error: {0}", result.Exception.Message));
result.Exception = null;
Type type = ((MethodInfo)input.MethodBase).ReturnType;
if (type.IsValueType)
{
result.ReturnValue = Activator.CreateInstance(type);
}
}
return resu<
}
Комментарии:
1. привет, GetNext() получает дескриптор и вызывается методом Invoke. как GetNext().Invoke(ввод, GetNext). Мне интересно, что произошло в вызванном методе, предположим, что целевой метод выдал исключение и перенес его в результат. Исключение? Как я могу определить аспект «время компиляции»?