MCPcopy
hub / github.com/uber-go/fx / provide

Method provide

module.go:183–233  ·  view source on GitHub ↗
(p provide)

Source from the content-addressed store, hash-verified

181}
182
183func (m *module) provide(p provide) {
184 if m.app.err != nil {
185 return
186 }
187
188 if p.IsSupply {
189 m.supply(p)
190 return
191 }
192
193 funcName := fxreflect.FuncName(p.Target)
194 var info dig.ProvideInfo
195 opts := []dig.ProvideOption{
196 dig.FillProvideInfo(&info),
197 dig.Export(!p.Private),
198 dig.WithProviderBeforeCallback(func(bci dig.BeforeCallbackInfo) {
199 m.log.LogEvent(&fxevent.BeforeRun{
200 Name: funcName,
201 Kind: "provide",
202 ModuleName: m.name,
203 })
204 }),
205 dig.WithProviderCallback(func(ci dig.CallbackInfo) {
206 m.log.LogEvent(&fxevent.Run{
207 Name: funcName,
208 Kind: "provide",
209 ModuleName: m.name,
210 Runtime: ci.Runtime,
211 Err: ci.Error,
212 })
213 }),
214 }
215
216 if err := runProvide(m.scope, p, opts...); err != nil {
217 m.app.err = err
218 }
219 outputNames := make([]string, len(info.Outputs))
220 for i, o := range info.Outputs {
221 outputNames[i] = o.String()
222 }
223
224 m.log.LogEvent(&fxevent.Provided{
225 ConstructorName: funcName,
226 StackTrace: p.Stack.Strings(),
227 ModuleTrace: append([]string{p.Stack[0].String()}, m.trace...),
228 ModuleName: m.name,
229 OutputTypeNames: outputNames,
230 Err: m.app.err,
231 Private: p.Private,
232 })
233}
234
235func (m *module) supply(p provide) {
236 typeName := p.SupplyType.String()

Callers 4

provideAllMethod · 0.95
TestPrivateFunction · 0.80
NewFunction · 0.80

Calls 6

supplyMethod · 0.95
FuncNameFunction · 0.92
runProvideFunction · 0.85
StringsMethod · 0.80
LogEventMethod · 0.65
StringMethod · 0.65

Tested by 2

TestPrivateFunction · 0.64