typescript-ioc icon indicating copy to clipboard operation
typescript-ioc copied to clipboard

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

Open koldoon opened this issue 4 years ago • 0 comments

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.

koldoon avatar Aug 18 '20 10:08 koldoon