Skip to content

Option to have target instance or (at least) target class name in factory context #72

Open
@koldoon

Description

@koldoon

I've got a proposal to include target instance (which I suppose is not possible since there isn't async resolution logic yet) or target Class (Type) name (I mean, TargetClass.constructor.name or even TargetClass.constructor) in factory binder context.

One of the most popular commonly used dependency is Logger, but the logger often include extra params, like Category or Module Name, that describes the place module logs comes from. Conventionally it looks like this:

export class SomeService {
    private readonly logger: Logger = Log.createLogger('SomeService');
}

So, with IoC I would like to have smth like this:

  • in main file:
Container.bind(Logger).factory(context => {
    // proposal: 'context.target' here is actual constructor (function) of target class
    return Log.createLogger(context.target.name)); 
}
  • and then in service:
export class SomeService {
    constructor(@Inject private logger:Logger) { }
}

But currently there is no way to get any suitable target instance info within factory context.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions