Adopting provider sets

The last concept that we need to know when using Wire is provider sets. Provider sets offer a way to group providers, and this can be helpful when writing injectors. Their use is optional; for example, earlier we used a provider set called wireSet, as shown in the following code:

func initializeServer() (*rest.Server, error) {
wire.Build(wireSet)
return nil, nil
}

However, we could have passed in all the providers individually, as shown in the following code:

func initializeServer() (*rest.Server, error) {
wire.Build(
// *config.Config
config.Load,

// *exchange.Converter
wire.Bind(new(exchange.Config), &config.Config{}),
exchange.NewConverter,

// *get.Getter
wire.Bind(new(get.Config), &config.Config{}),
get.NewGetter,

// *list.Lister
wire.Bind(new(list.Config), &config.Config{}),
list.NewLister,

// *register.Registerer
wire.Bind(new(register.Config), &config.Config{}),
wire.Bind(new(register.Exchanger), &exchange.Converter{}),
register.NewRegisterer,

// *rest.Server
wire.Bind(new(rest.Config), &config.Config{}),
wire.Bind(new(rest.GetModel), &get.Getter{}),
wire.Bind(new(rest.ListModel), &list.Lister{}),
wire.Bind(new(rest.RegisterModel), &register.Registerer{}),
rest.New,
)

return nil, nil
}

Sadly, the previous example is not contrived. It's taken from our small example service.

As you might expect, there are plenty more features in Wire, but at this point we have covered enough to get us started.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
18.224.59.145