def METHOD_NAME(wrapped, instance, args, kwargs):
    """Patch app initialization of middleware, components and renderers"""
    # allow instance to be initialized before wrapping them
    wrapped(*args, **kwargs)
    # add Pin to instance
    pin = Pin.get_from(molten)
    if not pin or not pin.enabled():
        return
    # Wrappers here allow us to trace objects without altering class or instance
    # attributes, which presents a problem when classes in molten use
    # ``__slots__``
    instance.router = WrapperRouter(instance.router)
    # wrap middleware functions/callables
    instance.middleware = [WrapperMiddleware(mw) for mw in instance.middleware]
    # wrap components objects within injector
    # NOTE: the app instance also contains a list of components but it does not
    # appear to be used for anything passing along to the dependency injector
    instance.injector.components = [WrapperComponent(c) for c in instance.injector.components]
    # but renderers objects
    instance.renderers = [WrapperRenderer(r) for r in instance.renderers]