return function(Vue)
  local tag = "LoadPlugin"
  return {
    loadAsyncHandler = function(assetName, handleHolder, sync, callback, parent)
      C_SpriteAtlasManager.Register(assetName)
      if sync then
        local handle = C_LuaUtility.InstantiateSync(assetName, parent)
        handleHolder.loadHandle = handle
        callback(handle.gameObject)
      else
        local _call = function(go)
          if go then
            go:SetActive(false)
          end
          FrameScheduler.add(callback, 1, go)
        end
        local handle = C_LuaUtility.InstantiateAsync(assetName, _call, parent)
        handleHolder.loadHandle = handle
      end
    end,
    releaseHandler = function(handleHolder)
      if handleHolder == nil then
        return
      end
      local handle = handleHolder.loadHandle
      if handle ~= nil then
        C_LuaUtility.DestroyObject(handle)
      end
    end,
    onDestroy = function(assetName, obj)
      C_SpriteAtlasManager.UnRegister(assetName)
    end,
    onOpening = function(uiType, pageName)
    end,
    onOpened = function(uiType, pageName, result)
    end
  }
end
