# All files / container/decorators Inject.ts

23.53% Statements 4/17
0% Branches 0/8
0% Functions 0/4
25% Lines 4/16

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    531x
    1x
    1x

    1x

     import {Container} from "../Container";
    import {Token} from "../Token";
    import {CannotInjectError} from "../error/CannotInjectError";

    /**
     * Injects a service into a class property or constructor parameter.
     */
    export function Inject(type?: (type?: any) => Function): Function;

    /**
     * Injects a service into a class property or constructor parameter.
     */
    export function Inject(serviceName?: string): Function;

    /**
     * Injects a service into a class property or constructor parameter.
     */
    export function Inject(token: Token<any>): Function;

    /**
     * Injects a service into a class property or constructor parameter.
     */
    export function Inject(typeOrName?: ((type?: any) => Function)|string|Token<any>): Function {
        return function(target: Object, propertyName: string, index?: number) {
            if (!typeOrName)
                typeOrName = () => (Reflect as any).getMetadata("design:type", target, propertyName);

            Container.registerHandler({
                object: target,
                propertyName: propertyName,
                index: index,
                value: containerInstance => {
                    let identifier: any;
                    if (typeof typeOrName === "string") {
                        identifier = typeOrName;

                    } else if (typeOrName instanceof Token) {
                        identifier = typeOrName;

                    } else {
                        identifier = typeOrName();
                    }

                    if (identifier === Object)
                        throw new CannotInjectError(target, propertyName);

                    return containerInstance.get<any>(identifier);
                }
            });
        };
    }