Comments (7)
You can iterate .registrations
to get the keys and check if they match your regex, then use .resolve(key)
. You can also use Array.from(container.cradle)
to get the keys. This performs a roll-up per call but will give you the most accurate result.
from awilix.
The parameter passed to resolve
is the container instance used; this can be the root container or a scoped container, so I recommend you use the one passed in.
The following would work and be preferred:
container.register({
resolveByRegex: {
resolve(c) {
return function (regex) {
const r = []
for (const key of c.cradle) {
if (key.match(regex)) {
// Can call `resolve` directly instead of going through the cradle proxy
r.push(c.resolve(key))
}
}
return r
}
}
},
})
Which is the same as what my original response was alluding to.
Note the difference
Yes, there is a difference between the 2 snippets you posted, but it still proves what I said to be true, that c
is the container.
from awilix.
How would I inject the container as dependency into the service?
from awilix.
container.register({
resolveByRegex: {
resolve: c => regex => console.log('container:', c)
}
})
from awilix.
c
then is the cradle, not the container, and it only works in PROXY mode.
We could just register the container itself 🤔
const awilix = require('awilix')
const container = awilix.createContainer({ injectionMode: awilix.InjectionMode.CLASSIC })
container.register({
$container: awilix.asValue(container),
})
container.loadModules(['providers/*.js'])
const resolveByRegex = container.resolve('resolveByRegex')
resolveByRegex(/MimeType$/)
module.exports = function ($container) {
return function (regex) {
const r = []
for (const key of $container.cradle) {
if (key.match(regex)) {
r.push($container.cradle[key])
}
}
return r
}
}
from awilix.
No, c
is the container.
Registering the container should also work, but I usually recommend against it.
from awilix.
@vincesp wrote:
c
then is the cradle, not the container, and it only works in PROXY mode.
@jeffijoe wrote:
No,
c
is the container.
Note the difference:
container.register({
resolveByRegex2: {
resolve: c => console.log('resolve:', c, c === container)
},
})
vs.
module.exports = function (c) {
console.log('module:', c)
}
Output:
resolve: [AwilixContainer (registrations: 7)] true
module: [object AwilixContainerCradle]
Which means, we can simplify resolveByRegex()
to:
container.register({
resolveByRegex: {
resolve() {
return function (regex) {
const r = []
for (const key of container.cradle) {
if (key.match(regex)) {
r.push(container.cradle[key])
}
}
return r
}
}
},
})
And hence can avoid registering the container itself.
from awilix.
Related Issues (20)
- [Question] Support for assisted inject HOT 2
- awilix object is undefined when using default import, but named import of functions work HOT 1
- Support for ESM modules HOT 3
- Is it possible to reinforce constructor param name/types? HOT 1
- Can't resolve HOT 4
- How to unregister a dependency from the container? HOT 6
- Default value not working in class constructor in Proxy mode HOT 2
- asFunction -> asClass Cyclic dependency HOT 2
- Awilix TypeError: Cannot read properties of undefined (reading 'cache') HOT 2
- Calling `loadModules` does not register all the file paths HOT 2
- Is it possible to detect / error on singletons dependent on transient or scoped registrations? HOT 1
- Awilix 10 type exposure HOT 1
- [QUESTION] Userland async initializers HOT 7
- replace camel-case dependency HOT 3
- Possible valid use-case for disabling strict mode for specific resolver HOT 2
- Critical dependency: the request of a dependency is an expression HOT 3
- Add TypeScript support HOT 1
- [QUESTION] - Awilix Fails to Autoload Modules in Vitest Tests with TypeScript Setup HOT 1
- How can I get scope inside instance? HOT 14
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from awilix.