在定义了一个协议,然后定义了一个扩展该协议的类(例如,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,但它没有正确版本。
异常消息应该扩展以标识这是“可能因为自定义类定义以来已重新加载协议”。
补丁将很快准备就绪。