Comments (5)
1- I think you should just call do.Invoke[I]
instead of do.InvokeAs[i]
, since your not performing interface matching here. I will improve the error message.
2- I'm not sure to understand the issue here. Your example output seems valid to me.
from do.
While i review comments on #45, I'm linking your issue to #45 (comment)
To describe the feedback from @mbark:
- We provide
*MyServiceImplem
- Then invoke
IMyService
- We implement a
*MyServiceMock
via an override for test purposes.
Problem: do.InvokeAs
will pick a random implementation of IMyService
from do.
Possible solutions:
- invoke the latest injected service -> I don't like it, since the service injection order might be non-determinist
- use
do.OverrideNamedValue(i, do.NameOf[IMyService](), NewMyServiceMock)
-> not developer friendly - use explicit aliases:
do.AsNamed()
-> might trigger error on override
@d-enk suggested reporting an error when multiple services match the interface.
Also, I would point out that since services injected in IoC containers are opaque, invoking an interface instead of a struct might lead to loading the wrong service if method signatures overlap. In that situation, an explicit alias is safer: do.AsNamed()
from do.
Another option, maybe you just need a separate method that returns a list of all match?
And in InvokeAs
allow only one
looks like related #33
from do.
to fix 1 problem #81
from do.
Related Issues (20)
- v2: Feature Request - expose a method for add lifecycle hook HOT 2
- How can I InvokeNamed T to any HOT 7
- V2 Feature Request: add lifecycle interface support HOT 2
- feat: InjectorOpts.HookBeforePanic HOT 2
- Performance Question about service instnace : getInstance(i Injector) (T, error) HOT 1
- Proposal: way to automate invoke deps in do.Provider for any type constructor HOT 2
- `OverrideTransient` is implemented with `OverrideNamed` instead of `OverrideNamedTransient` in v2.0.0-beta.5 HOT 1
- Expose a method for adding/removing lifecycle hooks at runtime
- Transform hooks into slices of hooks HOT 1
- Add hook at the scope level
- More hooks
- Add telemetry, OTEL, logger... HOT 1
- V2: Bug in parallel shutdown HOT 3
- Add toy examples in Go playground sandboxes
- Service register best practices HOT 5
- Need better handling for arrays
- Add TypeMismatch instead NotFound invoke error HOT 1
- Support `interface` in `As`/`InvokeAs` HOT 1
- Proposal: allow service providers registered in the root scope to be invoked with values and other providers in the scoped injector HOT 1
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 do.