我的基座组件的代码如下。当 Stuart Sierra 的库启动我的系统映射时,Pedestal defrecord 中实现的方法 start 被调用,它返回与 :pedestal-server 关联的组件的更新版本。生命周期管理器不应该传播更新的组件以便它可以被 stop 方法使用吗?每当我尝试通过在 REPL 中调用 (component/stop (system)) 来停止服务器时,什么都不会发生,因为 :pedestal-server 键设置为 nil。
(defrecord Pedestal [service-map pedestal-server]
component/Lifecycle
(start [this]
(if pedestal-server
this
(assoc this :pedestal-server
(-> service-map
http/create-server
http/start))))
(stop [this]
(when pedestal-server
(http/stop pedestal-server))
(assoc this :pedestal-server nil)))
(defn new-pedestal []
(map->Pedestal {}))