# Регистрация сервиса

# Создание сервиса по умолчанию

Для создания сервиса используется декоратор @Injectable

import { Injectable } from '@scandltd/vue-injector'

@Injectable
class LogService {}

# Внедрение зависимостей

В сервис, так же как и в компонент, возможно внедрить зависимости. Сделать это можно, передав зависимости в декоратор Inject.

@Injectable
class UserService extends Inject {
    @Inject(LogService) LogService;

    constructor () {
        this.LogService.log('Create User service');
    }
}

# Использование фабрики

Иногда вам нужно реализовать зависимости от сторонней библиотеки, которая не предназначена для работы с DI. В таких случаях вы можете использовать поставщика фабрики. Это можно сделать, передав фабрику в свойстве useFactory декоратора@ Injectable.

class Logger { ... }

@Injectable({
    useFactory: () => new Logger()
})
class UserService extends Inject {}

Свойство useFactory должно быть функцией с возвращаемым значением. Также в эту функцию передаются экземпляр корневого приложения Vue и объект, содержащий встроенные зависимости.


useFactory: () => {
    return new Logger(vm, imports)
}

# Использование значения

Иногда легче использовать готовый объект. Для того чтобы использовать уже созданный объект, необходимо сконфигурировать декоратор используя свойство "useValue".

const Logger = { ... }

@Injectable({
    useValue: Logger
})
class LoggerService {}

useValue может быть любого типа