在一个定义协议并定义一个扩展该协议的类(例如,reify, defrecord, deftype)的情况下,然后在之后重新定义协议(通常是通过重新加载定义协议的命名空间),那么现有的实例就不再有效。
然而,所生成的异常可能会令人困惑
`
java.lang.IllegalArgumentException: No implementation of method: :injections of protocol: #'fan.microservice/MicroService found for class: fan.auth.AuthService
clojure.core/-cache-protocol-fn core_deftype.clj: 544
fan.microservice/eval23300/fn/G microservice.clj: 12
clojure.core/map/fn core.clj: 2559
clojure.lang.LazySeq.sval LazySeq.java: 40
clojure.lang.LazySeq.seq LazySeq.java: 49
clojure.lang.Cons.next Cons.java: 39
clojure.lang.RT.boundedLength RT.java: 1654
clojure.lang.RestFn.applyTo RestFn.java: 130
clojure.core/apply core.clj: 626
fan.microservice.StandardContainer/construct-ring-handler microservice.clj: 51
`
令人困惑的部分在于(在上述例子中), AuthService 扩展了 MicroService,但不正确。
异常消息应扩展以识别这是“可能是由于类定义后协议被重新加载导致的”。
补丁将很快准备好。