个人习惯在类中实现接口统一用显式实现, 没想到今天因为这个习惯浪费了一整天的时间, 差点就要砸键盘了![]()
[ConfigurationElementType(typeof(CustomCallHandlerData))]public class MyAuthCallHandler : ICallHandler{private int order = 0;public MyAuthCallHandler(){}public MyAuthCallHandler(NameValueCollection attributes){}IMethodReturn ICallHandler.Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext){Console.WriteLine("icallhandler.invoke| " + input.MethodBase.DeclaringType.FullName + "::" + input.MethodBase.Name);return getNext()(input, getNext);}int ICallHandler.Order{get{return order;}set{order = value;}}}
就这么简单的一个玩意, 用Attribute应用到Method一切正常
[AttributeUsage(AttributeTargets.Method)]public class MyAuthCallHandlerAttribute : HandlerAttribute{public override ICallHandler CreateHandler(Microsoft.Practices.Unity.IUnityContainer container){return new MyAuthCallHandler();}}
当我想用config文件进行配置的时候, 恶梦来了, 实例化对象的时候死活说参数为null, 一开始以为是CustomCallHandlerData的问题,找了半天资料![]()
最后一个个排除, 原来居然是CallHandler的接口显式实现的问题, 悲剧~~
改成:
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)public int Order
一切正常了, 莫名其妙 :(
浙公网安备 33010602011771号