Skip to content

Use injected() function with AsyncFactory? #41

@JSchaenzle

Description

@JSchaenzle

I have a singleton class that is being injected into other classes using the injected(...) syntax.
The class is called Exchange.
I need to add an async initializer to that class. (want to set up a websocket before the class is used)
I'm trying to do so by creating a Factory but I'm running into a roadblock. Can I still used injected() when using an async Factory?

I have tokens defined as follows:

    exchange: token<Exchange>('Exchange'),
    exchangeFactory: token<AsyncFactory<Exchange>>('Exchange Factory'),

and container bindings set up like this,

    .bind(TOKENS.exchange)
    .toInstance(ExchangeAlpaca)
    .inSingletonScope();

container
    .bind(TOKENS.exchangeFactory)
    .toFactory(async () => {
        let e = container.get(TOKENS.exchange);
        await e.init();
        return e;
    });
class SomeClass {
  constructor(private e: Exchange){}
}
injected(SomeClass, TOKENS.exchangeFactory.optional) // <- this doesn't work
injected(SomeClass, TOKENS.exchange.optional) // <- this works but factory doesn't get used.

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