     /// - Parameters:
     ///   - viewProtocol: The protocol conformed by the view of the router. Can be pure Swift protocol or objc protocol.
     ///   - router: The subclass of ZIKViewRouter.
-    public static func register(viewProtocol: Any.Type, router: AnyClass) {
+    public static func register(viewProtocol: Any.Type, forRouter router: AnyClass) {
         assert(ZIKViewRouter._isLoadFinished() == false, "Can't register after app did finish launch. Only register in registerRoutableDestination().")
         assert(ZIKRouter_classIsSubclassOfClass(router, ZIKViewRouter.self), "This router must be subclass of ZIKViewRouter")
         if ZIKRouter_isObjcProtocol(viewProtocol) {

        preparation prepare: ((Destination) -> Swift.Void)? = nil
        ) -> Destination? {
        var destination: Destination?
        let routerClass = Registry.forService(serviceProtocol)
        assert((routerClass?.completeSynchronously())!,"router class (\(String(describing: routerClass))) can't get destination synchronously")
        routerClass?.perform(configure: { config in
            config.prepareForRoute = { d in

    /// - Parameters:
    ///   - configProtocol: The protocol conformed by the custom configuration of the router. Can be pure Swift protocol or objc protocol.
    ///   - router: The subclass of ZIKServiceRouter.
    public static func register<ModuleConfig>(serviceModule configProtocol: ModuleConfig.Type, forRouter router: AnyClass) {
        assert(ZIKServiceRouter._isLoadFinished() == false, "Can't register after app did finish launch. Only register in registerRoutableDestination().")
        assert(ZIKRouter_classIsSubclassOfClass(router, ZIKServiceRouter.self), "This router must be subclass of ZIKServiceRouter")
        if ZIKRouter_isObjcProtocol(configProtocol) {
