To bind middlewares, plugins that needs the 'app' object to init
    Bound middlewares will be assigned on cls.init()

def init_app(kls):
    """
    To bind middlewares, plugins that needs the 'app' object to init
    Bound middlewares will be assigned on cls.init()
    """
    if not hasattr(kls, "__call__"):
        raise TypeError("init_app: '%s' is not callable" % kls)
    View._init_apps.add(kls)
    return kls