Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

IoC with loopback #180

Open
pferioli opened this issue Apr 22, 2022 · 4 comments
Open

IoC with loopback #180

pferioli opened this issue Apr 22, 2022 · 4 comments

Comments

@pferioli
Copy link

pferioli commented Apr 22, 2022

Hi to all !
I started using the library a few months ago and it's all working fine using loopback framework, but having some issues when handlers are called as they have no application context. Tried to setup the ".withContainer" with no luck, did someone used this with Loopback.io ?

https://bus.node-ts.com/guide/dependency-injection

regards

@adenhertog
Copy link
Contributor

Hi @pferioli! Could you provide a small example of what you're seeing re loopback and the handler context? I'll have a look

@pferioli
Copy link
Author

I wanted to understand if it's possible to setup using "withContainer" the loopback app so everything is already binded there while booting. I wasn't able to pass a "container" like the one in the example

.withContainer({
      get <T>(type: ClassConstructor<T>) {
        return container.get<T>(type)
      }
    })

when the handler (as function) is invoked, there's no app context related so i created manually a new ctx and binded all the services i required to process the request. This requires to bind all manually. Asked in the LB4 slack channel some time ago but with no luck

const validateTicketHandler = handlerFor(ValidateTicketCommand,
    async (event: ValidateTicketCommand) => {

        const ctx = new Context();

        ctx.bind('services.TicketManagerService').toClass(TicketManagerService)

        try {
            const ticketManagerService: TicketManagerService = await ctx.get('services.TicketManagerService');

            ticketManagerService.validateIncident(event.incomingEvent);

        } catch (error) {
            console.error(error)
        }
    }
);

@manarhusrieh
Copy link
Contributor

Hi @pferioli . We have been using this library with Loopback 4 handler classes successfully using container.getSync(). However, the only issue we faced is that we can't use constructor parameters in our handler class that require async operations because Loopback will throw exception. I have opened a PR #191 which resolves this limitation.

@pferioli
Copy link
Author

@manarhusrieh thanks for the support for some reason i didn't see your message until now, really sorry for that. I'd been working in some other projects and i wanted to use this library in a new one. Is it possible to share some snippet on how you did the bus initialization in loopback, for older projects i used function handlers successfully.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants