Page Contents

Home > @loopback/service-proxy > ServiceMixin

ServiceMixin() function

A mixin class for Application that creates a .serviceProvider() function to register a service automatically. Also overrides component function to allow it to register repositories automatically.

Signature:

export declare function ServiceMixin<T extends MixinTarget<Application>>(superClass: T): {
    new (...args: any[]): {
        serviceProvider<S>(provider: Constructor<Provider<S>>, nameOrOptions?: string | ServiceOptions): Binding<S>;
        component<C extends Component = Component>(componentCtor: Constructor<C>, nameOrOptions?: string | BindingFromClassOptions): Binding<C>;
        mountComponentServices<C_1 extends Component = Component>(component: Constructor<C_1>, componentBindingKey?: BindingAddress<C_1> | undefined): void;
        readonly options: import("@loopback/core").ApplicationConfig;
        readonly state: string;
        controller: <T>(controllerCtor: import("@loopback/core").ControllerClass<T>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T>;
        server: <T_1 extends import("@loopback/core").Server>(ctor: Constructor<T_1>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_1>;
        servers: <T_2 extends import("@loopback/core").Server>(ctors: Constructor<T_2>[]) => Binding<any>[];
        getServer: <T_3 extends import("@loopback/core").Server>(target: string | Constructor<T_3>) => Promise<T_3>;
        init: () => Promise<void>;
        onInit: (fn: () => import("@loopback/core").ValueOrPromise<void>) => Binding<import("@loopback/core").LifeCycleObserver>;
        start: () => Promise<void>;
        onStart: (fn: () => import("@loopback/core").ValueOrPromise<void>) => Binding<import("@loopback/core").LifeCycleObserver>;
        stop: () => Promise<void>;
        onStop: (fn: () => import("@loopback/core").ValueOrPromise<void>) => Binding<import("@loopback/core").LifeCycleObserver>;
        setMetadata: (metadata: import("@loopback/core").ApplicationMetadata) => void;
        lifeCycleObserver: <T_4 extends import("@loopback/core").LifeCycleObserver>(ctor: Constructor<T_4>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_4>;
        service: <S_1>(cls: import("@loopback/core").ServiceOrProviderClass<S_1>, nameOrOptions?: string | ServiceOptions | undefined) => Binding<S_1>;
        interceptor: (interceptor: import("@loopback/core").Interceptor | Constructor<Provider<import("@loopback/core").Interceptor>>, nameOrOptions?: string | import("@loopback/core").InterceptorBindingOptions | undefined) => Binding<import("@loopback/core").Interceptor>;
        readonly name: string;
        readonly subscriptionManager: import("@loopback/core").ContextSubscriptionManager;
        scope: import("@loopback/core").BindingScope;
        readonly parent: import("@loopback/core").Context | undefined;
        emitEvent: <T_5 extends import("@loopback/core").ContextEvent>(type: string, event: T_5) => void;
        emitError: (err: unknown) => void;
        bind: <ValueType = any>(key: BindingAddress<ValueType>) => Binding<ValueType>;
        add: (binding: Binding<unknown>) => Application;
        configure: <ConfigValueType = any>(key?: BindingAddress | undefined) => Binding<ConfigValueType>;
        getConfigAsValueOrPromise: <ConfigValueType_1>(key: BindingAddress, propertyPath?: string | undefined, resolutionOptions?: import("@loopback/core").ResolutionOptions | undefined) => import("@loopback/core").ValueOrPromise<ConfigValueType_1 | undefined>;
        getConfig: <ConfigValueType_2>(key: BindingAddress, propertyPath?: string | undefined, resolutionOptions?: import("@loopback/core").ResolutionOptions | undefined) => Promise<ConfigValueType_2 | undefined>;
        getConfigSync: <ConfigValueType_3>(key: BindingAddress, propertyPath?: string | undefined, resolutionOptions?: import("@loopback/core").ResolutionOptions | undefined) => ConfigValueType_3 | undefined;
        unbind: (key: BindingAddress) => boolean;
        subscribe: (observer: import("@loopback/core").ContextEventObserver) => import("@loopback/core").Subscription;
        unsubscribe: (observer: import("@loopback/core").ContextEventObserver) => boolean;
        close: () => void;
        isSubscribed: (observer: import("@loopback/core").ContextObserver) => boolean;
        createView: <T_6 = unknown>(filter: import("@loopback/core").BindingFilter, comparator?: import("@loopback/core").BindingComparator | undefined, options?: Omit<import("@loopback/core").ResolutionOptions, "session"> | undefined) => import("@loopback/core").ContextView<T_6>;
        contains: (key: BindingAddress) => boolean;
        isBound: (key: BindingAddress) => boolean;
        getOwnerContext: (keyOrBinding: BindingAddress | Readonly<Binding<unknown>>) => import("@loopback/core").Context | undefined;
        getScopedContext: (scope: import("@loopback/core").BindingScope.APPLICATION | import("@loopback/core").BindingScope.SERVER | import("@loopback/core").BindingScope.REQUEST) => import("@loopback/core").Context | undefined;
        getResolutionContext: (binding: Readonly<Binding<unknown>>) => import("@loopback/core").Context | undefined;
        isVisibleTo: (ctx: import("@loopback/core").Context) => boolean;
        find: <ValueType_1 = any>(pattern?: string | RegExp | import("@loopback/core").BindingFilter | undefined) => Readonly<Binding<ValueType_1>>[];
        findByTag: <ValueType_2 = any>(tagFilter: RegExp | import("@loopback/core").BindingTag) => Readonly<Binding<ValueType_2>>[];
        get: {
            <ValueType_3>(keyWithPath: BindingAddress<ValueType_3>, session?: import("@loopback/core").ResolutionSession | undefined): Promise<ValueType_3>;
            <ValueType_4>(keyWithPath: BindingAddress<ValueType_4>, options: import("@loopback/core").ResolutionOptions): Promise<ValueType_4 | undefined>;
        };
        getSync: {
            <ValueType_5>(keyWithPath: BindingAddress<ValueType_5>, session?: import("@loopback/core").ResolutionSession | undefined): ValueType_5;
            <ValueType_6>(keyWithPath: BindingAddress<ValueType_6>, options?: import("@loopback/core").ResolutionOptions | undefined): ValueType_6 | undefined;
        };
        getBinding: {
            <ValueType_7 = any>(key: BindingAddress<ValueType_7>): Binding<ValueType_7>;
            <ValueType_8>(key: BindingAddress<ValueType_8>, options?: {
                optional?: boolean | undefined;
            } | undefined): Binding<ValueType_8> | undefined;
        };
        findOrCreateBinding: <T_7>(key: BindingAddress<T_7>, policy?: import("@loopback/core").BindingCreationPolicy | undefined) => Binding<T_7>;
        getValueOrPromise: <ValueType_9>(keyWithPath: BindingAddress<ValueType_9>, optionsOrSession?: import("@loopback/core").ResolutionOptionsOrSession | undefined) => import("@loopback/core").ValueOrPromise<ValueType_9 | undefined>;
        toJSON: () => import("@loopback/core").JSONObject;
        inspect: (options?: import("@loopback/core").ContextInspectOptions | undefined) => import("@loopback/core").JSONObject;
        on: {
            (eventName: "bind" | "unbind", listener: import("@loopback/core").ContextEventListener): Application;
            (event: string | symbol, listener: (...args: any[]) => void): Application;
        };
        once: {
            (eventName: "bind" | "unbind", listener: import("@loopback/core").ContextEventListener): Application;
            (event: string | symbol, listener: (...args: any[]) => void): Application;
        };
        addListener: (eventName: string | symbol, listener: (...args: any[]) => void) => Application;
        removeListener: (eventName: string | symbol, listener: (...args: any[]) => void) => Application;
        off: (eventName: string | symbol, listener: (...args: any[]) => void) => Application;
        removeAllListeners: (event?: string | symbol | undefined) => Application;
        setMaxListeners: (n: number) => Application;
        getMaxListeners: () => number;
        listeners: (eventName: string | symbol) => Function[];
        rawListeners: (eventName: string | symbol) => Function[];
        emit: (eventName: string | symbol, ...args: any[]) => boolean;
        listenerCount: (eventName: string | symbol) => number;
        prependListener: (eventName: string | symbol, listener: (...args: any[]) => void) => Application;
        prependOnceListener: (eventName: string | symbol, listener: (...args: any[]) => void) => Application;
        eventNames: () => (string | symbol)[];
    };
} & T;

Parameters

Parameter Type Description
superClass T Application class

Returns:

{ new (…args: any[]): { serviceProvider<S>(provider: Constructor<Provider<S>>, nameOrOptions?: string | ServiceOptions): Binding<S>; component<C extends Component = Component>(componentCtor: Constructor<C>, nameOrOptions?: string | BindingFromClassOptions): Binding<C>; mountComponentServices<C_1 extends Component = Component>(component: Constructor<C_1>, componentBindingKey?: BindingAddress<C_1> | undefined): void; readonly options: import(“@loopback/core”).ApplicationConfig; readonly state: string; controller: <T>(controllerCtor: import(“@loopback/core”).ControllerClass<T>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T>; server: <T_1 extends import(“@loopback/core”).Server>(ctor: Constructor<T_1>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_1>; servers: <T_2 extends import(“@loopback/core”).Server>(ctors: Constructor<T_2>[]) => Binding<any>[]; getServer: <T_3 extends import(“@loopback/core”).Server>(target: string | Constructor<T_3>) => Promise<T_3>; init: () => Promise<void>; onInit: (fn: () => import(“@loopback/core”).ValueOrPromise<void>) => Binding<import(“@loopback/core”).LifeCycleObserver>; start: () => Promise<void>; onStart: (fn: () => import(“@loopback/core”).ValueOrPromise<void>) => Binding<import(“@loopback/core”).LifeCycleObserver>; stop: () => Promise<void>; onStop: (fn: () => import(“@loopback/core”).ValueOrPromise<void>) => Binding<import(“@loopback/core”).LifeCycleObserver>; setMetadata: (metadata: import(“@loopback/core”).ApplicationMetadata) => void; lifeCycleObserver: <T_4 extends import(“@loopback/core”).LifeCycleObserver>(ctor: Constructor<T_4>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_4>; service: <S_1>(cls: import(“@loopback/core”).ServiceOrProviderClass<S_1>, nameOrOptions?: string | ServiceOptions | undefined) => Binding<S_1>; interceptor: (interceptor: import(“@loopback/core”).Interceptor | Constructor<Provider<import(“@loopback/core”).Interceptor>>, nameOrOptions?: string | import(“@loopback/core”).InterceptorBindingOptions | undefined) => Binding<import(“@loopback/core”).Interceptor>; readonly name: string; readonly subscriptionManager: import(“@loopback/core”).ContextSubscriptionManager; scope: import(“@loopback/core”).BindingScope; readonly parent: import(“@loopback/core”).Context | undefined; emitEvent: <T_5 extends import(“@loopback/core”).ContextEvent>(type: string, event: T_5) => void; emitError: (err: unknown) => void; bind: <ValueType = any>(key: BindingAddress<ValueType>) => Binding<ValueType>; add: (binding: Binding<unknown>) => Application; configure: <ConfigValueType = any>(key?: BindingAddress | undefined) => Binding<ConfigValueType>; getConfigAsValueOrPromise: <ConfigValueType_1>(key: BindingAddress, propertyPath?: string | undefined, resolutionOptions?: import(“@loopback/core”).ResolutionOptions | undefined) => import(“@loopback/core”).ValueOrPromise<ConfigValueType_1 | undefined>; getConfig: <ConfigValueType_2>(key: BindingAddress, propertyPath?: string | undefined, resolutionOptions?: import(“@loopback/core”).ResolutionOptions | undefined) => Promise<ConfigValueType_2 | undefined>; getConfigSync: <ConfigValueType_3>(key: BindingAddress, propertyPath?: string | undefined, resolutionOptions?: import(“@loopback/core”).ResolutionOptions | undefined) => ConfigValueType_3 | undefined; unbind: (key: BindingAddress) => boolean; subscribe: (observer: import(“@loopback/core”).ContextEventObserver) => import(“@loopback/core”).Subscription; unsubscribe: (observer: import(“@loopback/core”).ContextEventObserver) => boolean; close: () => void; isSubscribed: (observer: import(“@loopback/core”).ContextObserver) => boolean; createView: <T_6 = unknown>(filter: import(“@loopback/core”).BindingFilter, comparator?: import(“@loopback/core”).BindingComparator | undefined, options?: Omit<import(“@loopback/core”).ResolutionOptions, “session”> | undefined) => import(“@loopback/core”).ContextView<T_6>; contains: (key: BindingAddress) => boolean; isBound: (key: BindingAddress) => boolean; getOwnerContext: (keyOrBinding: BindingAddress | Readonly<Binding<unknown>>) => import(“@loopback/core”).Context | undefined; getScopedContext: (scope: import(“@loopback/core”).BindingScope.APPLICATION | import(“@loopback/core”).BindingScope.SERVER | import(“@loopback/core”).BindingScope.REQUEST) => import(“@loopback/core”).Context | undefined; getResolutionContext: (binding: Readonly<Binding<unknown>>) => import(“@loopback/core”).Context | undefined; isVisibleTo: (ctx: import(“@loopback/core”).Context) => boolean; find: <ValueType_1 = any>(pattern?: string | RegExp | import(“@loopback/core”).BindingFilter | undefined) => Readonly<Binding<ValueType_1>>[]; findByTag: <ValueType_2 = any>(tagFilter: RegExp | import(“@loopback/core”).BindingTag) => Readonly<Binding<ValueType_2>>[]; get: { <ValueType_3>(keyWithPath: BindingAddress<ValueType_3>, session?: import(“@loopback/core”).ResolutionSession | undefined): Promise<ValueType_3>; <ValueType_4>(keyWithPath: BindingAddress<ValueType_4>, options: import(“@loopback/core”).ResolutionOptions): Promise<ValueType_4 | undefined>; }; getSync: { <ValueType_5>(keyWithPath: BindingAddress<ValueType_5>, session?: import(“@loopback/core”).ResolutionSession | undefined): ValueType_5; <ValueType_6>(keyWithPath: BindingAddress<ValueType_6>, options?: import(“@loopback/core”).ResolutionOptions | undefined): ValueType_6 | undefined; }; getBinding: { <ValueType_7 = any>(key: BindingAddress<ValueType_7>): Binding<ValueType_7>; <ValueType_8>(key: BindingAddress<ValueType_8>, options?: { optional?: boolean | undefined; } | undefined): Binding<ValueType_8> | undefined; }; findOrCreateBinding: <T_7>(key: BindingAddress<T_7>, policy?: import(“@loopback/core”).BindingCreationPolicy | undefined) => Binding<T_7>; getValueOrPromise: <ValueType_9>(keyWithPath: BindingAddress<ValueType_9>, optionsOrSession?: import(“@loopback/core”).ResolutionOptionsOrSession | undefined) => import(“@loopback/core”).ValueOrPromise<ValueType_9 | undefined>; toJSON: () => import(“@loopback/core”).JSONObject; inspect: (options?: import(“@loopback/core”).ContextInspectOptions | undefined) => import(“@loopback/core”).JSONObject; on: { (eventName: “bind” | “unbind”, listener: import(“@loopback/core”).ContextEventListener): Application; (event: string | symbol, listener: (…args: any[]) => void): Application; }; once: { (eventName: “bind” | “unbind”, listener: import(“@loopback/core”).ContextEventListener): Application; (event: string | symbol, listener: (…args: any[]) => void): Application; }; addListener: (eventName: string | symbol, listener: (…args: any[]) => void) => Application; removeListener: (eventName: string | symbol, listener: (…args: any[]) => void) => Application; off: (eventName: string | symbol, listener: (…args: any[]) => void) => Application; removeAllListeners: (event?: string | symbol | undefined) => Application; setMaxListeners: (n: number) => Application; getMaxListeners: () => number; listeners: (eventName: string | symbol) => Function[]; rawListeners: (eventName: string | symbol) => Function[]; emit: (eventName: string | symbol, …args: any[]) => boolean; listenerCount: (eventName: string | symbol) => number; prependListener: (eventName: string | symbol, listener: (…args: any[]) => void) => Application; prependOnceListener: (eventName: string | symbol, listener: (…args: any[]) => void) => Application; eventNames: () => (string | symbol)[]; }; } & T

A new class that extends the super class with service proxy related methods

Example

class MyApplication extends ServiceMixin(Application) {}

Please note: the members in the mixin function are documented in a dummy class called ServiceMixinDoc