Инъекционная инъекция является одним из возможных решений, которые можно было бы назвать требованием «Зависимость обфускации». Зависимость Obfuscation - это метод принятия «очевидной» природы из процесса предоставления зависимости классу, который ее требует, и, следовательно, каким-то образом запутывает предоставление указанной зависимости указанному классу. Это не обязательно плохо. Фактически, путем запутывания способа предоставления зависимостям классу, то что-то вне класса отвечает за создание зависимости, что означает, что в разных сценариях может быть предоставлена другая реализация зависимости, не внося никаких изменений к классу. Это отлично подходит для переключения между режимами производства и тестирования (например, с использованием зависимости «mock»).
К сожалению, плохая часть состоит в том, что некоторые люди предположили, что вам нужна специализированная структура для обфускации зависимостей и что вы как-то «менее» программист, если не хотите использовать определенную инфраструктуру для этого. Другим, чрезвычайно тревожным мифом, по мнению многих, является то, что инъекция зависимостей - единственный способ добиться запутывания зависимости. Это явно и исторически и, очевидно, на 100% неверно, но у вас возникнут проблемы с убеждением некоторых людей в том, что есть альтернативы инъекции зависимостей для требований обфускации зависимостей.
Программисты поняли, что потребность в обфускации зависит от лет и много альтернатив решения эволюционировали как до, так и после инъекции зависимостей. Существуют шаблоны Factory, но есть много вариантов с использованием ThreadLocal, где не требуется инъекции в конкретный экземпляр - зависимость эффективно вводится в поток, который имеет преимущество в том, чтобы сделать доступный объект (через удобные статические методы getter) до любой класс, который требует его, без необходимости добавлять аннотации к классам, которые его требуют, и создать сложный XML-клей, чтобы это произошло. Когда ваши зависимости требуются для настойчивости (JPA / JDO или что-то еще), это позволяет вам добиться «tranaparent persistence» намного проще и с классами модели домена и бизнес-модели, состоящими исключительно из POJO (т. Е. Никакой специфической структуры / блокировки в аннотациях).
У вас есть копия вашего экземпляра Vue.
Проверьте это.
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const Page1 = { template: '<div>Page1</div>' }
const Page2 = { template: '<div>Page2</div>' }
const routes = [
{ path: '/page1', component: Page1 },
{ path: '/page2', component: Page1 }
]
const router = new VueRouter({
routes // short for `routes: routes`
})
const app = new Vue({
router,
render: h => h(App)
}).$mount('#app')
Ваш основной экземпляр Vue дублируется:
new Vue({
el: '#app',
render: h => h(App)
})
и:
const app = new Vue({
router
}).$mount('#app')
Я думаю, что это является источником проблемы. Я полагаю, это может выглядеть так:
import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const Page1 = { template: '<div>Page1</div>' }
const Page2 = { template: '<div>Page2</div>' }
const routes = [
{ path: '/page1', component: Page1 },
{ path: '/page2', component: Page1 }
]
const router = new VueRouter({
routes // short for `routes: routes`
})
const app = new Vue({
router,
render: h => h(App)
}).$mount('#app')