No one is claiming that Angular is required. Any React dev can tell you that Angular is not required LOL.
Deep within a shared module which I don't control, I do not have the ability to pass arguments to function myController(dependency1, dependency2) The maintainer of that shared module would need to publicly expose the ability to pass in new dependencies, and at that point you're basically building a DI system. Might as well use one that already exists.
Angular's dependency injection (and, based on the examples in this post, nestjs' as well) already looks like your "invert control" example:
Without dependency injection though, you need to manually supply dependency1 and dependency2 all over the place, as well as manually instantiate classes. Super annoying. Angular analyzes the types and "automatically" / transparently supplies the appropriate input arguments.
I'm really not looking for an argument though. I was just trying to answer your question "what am I missing?". Clearly you're happy with the way you're currently doing things. There's no reason to pick up a tool you don't need.
Yup, I’m not arguing, And I do appreciate you trying to help me find what I might be missing. But I’m just hoping to share that Jest, Sinon, and most JS libraries that impliment spies allow you to mock any dependency. So the following might not be necessarily true.
Deep within a shared module which I don't control, I do not have the ability to pass arguments to function myController(dependency1, dependency2) The maintainer of that shared module would need to publicly expose the ability to pass in new dependencies
Well, I mean it is 100% true, but since Jest can mock import statements, you don’t necessarily have to invert control to pass a spy in because the module loader does that for IOC for you.
Thank you for your thoughts. If someone would be willing to verify my hypothesis, I would appreciate it. So far I have not needed DI, but there might be circumstances I haven’t encountered.
Again, I enjoyed your article and I appreciate your responses. :)
But I’m just hoping to share that Jest, Sinon, and most JS libraries that impliment spies allow you to mock any dependency.
In my case, I haven't used DI for tests but rather for production code. As a real world example, this angular module for working with cookies allows you to replace the CookieService with a CookieBackendService when rendering your app on the server side. As always with programming, I'm sure there are other ways you could accomplish the same thing.
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
You can avoid the big complicated DI of Angular by just using function DI with native JS.
So instead of:
You can invert control:
Now you can mock those two dependencies by passing in a substitute. No Angular required.
Well
No one is claiming that Angular is required. Any React dev can tell you that Angular is not required LOL.
Deep within a shared module which I don't control, I do not have the ability to pass arguments to
function myController(dependency1, dependency2)
The maintainer of that shared module would need to publicly expose the ability to pass in new dependencies, and at that point you're basically building a DI system. Might as well use one that already exists.Angular's dependency injection (and, based on the examples in this post, nestjs' as well) already looks like your "invert control" example:
Without dependency injection though, you need to manually supply
dependency1
anddependency2
all over the place, as well as manually instantiate classes. Super annoying. Angular analyzes the types and "automatically" / transparently supplies the appropriate input arguments.I'm really not looking for an argument though. I was just trying to answer your question "what am I missing?". Clearly you're happy with the way you're currently doing things. There's no reason to pick up a tool you don't need.
Yup, I’m not arguing, And I do appreciate you trying to help me find what I might be missing. But I’m just hoping to share that Jest, Sinon, and most JS libraries that impliment spies allow you to mock any dependency. So the following might not be necessarily true.
Well, I mean it is 100% true, but since Jest can mock import statements, you don’t necessarily have to invert control to pass a spy in because the module loader does that for IOC for you.
Thank you for your thoughts. If someone would be willing to verify my hypothesis, I would appreciate it. So far I have not needed DI, but there might be circumstances I haven’t encountered.
Again, I enjoyed your article and I appreciate your responses. :)
In my case, I haven't used DI for tests but rather for production code. As a real world example, this angular module for working with cookies allows you to replace the
CookieService
with aCookieBackendService
when rendering your app on the server side. As always with programming, I'm sure there are other ways you could accomplish the same thing.