bus icon indicating copy to clipboard operation
bus copied to clipboard

IoC with loopback

Open pferioli opened this issue 2 years ago • 4 comments

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

pferioli avatar Apr 22 '22 19:04 pferioli

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

adenhertog avatar Apr 22 '22 20:04 adenhertog

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)
        }
    }
);

pferioli avatar Apr 22 '22 22:04 pferioli

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.

manarhusrieh avatar Dec 26 '22 12:12 manarhusrieh

@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.

pferioli avatar Jun 28 '23 16:06 pferioli