Edit in JSFiddle

const Provider = {
	provide: {
  	foo: 'bar'
  },
  
  template: `<div><slot><slot></div>`
}

const Child = {
	inject: ['foo'],
  
  template: `<div>{{ foo }} injected. <slot><slot></div>`,
}

new Vue({
	el: '#app',
 
 	components: { Child, Provider }
})
<script src="https://unpkg.com/vue@2.2.2/dist/vue.js"></script>

<div id="app">
  <provider>
  	<child>
    	<child>
      	<child></child>
      </child>
    </child>
  </provider>
</div>