Module Sihl.Container

Lifecycle

Every service has a lifecycle, meaning it can be started and stopped. *

type lifecycle = Sihl__.Core_container.lifecycle = {
type_name : string;
implementation_name : string;
id : int;
dependencies : unit -> lifecycle list;
start : unit -> unit Lwt.t;
stop : unit -> unit Lwt.t;
}
val create_lifecycle : ?⁠dependencies:(unit -> lifecycle list) -> ?⁠start:(unit -> unit Lwt.t) -> ?⁠stop:(unit -> unit Lwt.t) -> ?⁠implementation_name:string -> string -> lifecycle

Service

A service has a start and stop function and a lifecycle. *

module Service : sig ... end
val start_services : Service.t list -> lifecycle list Lwt.t

start_services services starts a list of services. The order does not matter as the services are started in the order of their dependencies. (No service is started before its dependency)

val stop_services : Service.t list -> unit Lwt.t

stop_services ctx services stops a list of services with a context ctx. The order does not matter as the services are stopped in the order of their dependencies. (No service is stopped after its dependency)

module Map : sig ... end
val collect_all_lifecycles : lifecycle list -> lifecycle Map.t
val top_sort_lifecycles : lifecycle list -> lifecycle list