func (c *fakeConfiguration) User() *User {
	u := new(User)
	u.Name = "bar"
	return u
}
BarUser an instance fooUser is injectable with tag `inject:""` or constructor
package inject_test
import (
	"github.com/stretchr/testify/assert"
	"hidevops.io/hiboot/pkg/app"
	"hidevops.io/hiboot/pkg/at"
	"hidevops.io/hiboot/pkg/factory"
	"hidevops.io/hiboot/pkg/factory/autoconfigure"
	"hidevops.io/hiboot/pkg/factory/instantiate"
	"hidevops.io/hiboot/pkg/inject"
	"hidevops.io/hiboot/pkg/inject/annotation"
	"hidevops.io/hiboot/pkg/log"
	"hidevops.io/hiboot/pkg/utils/cmap"
	"hidevops.io/hiboot/pkg/utils/io"
	"os"
	"path/filepath"
	"reflect"
	"testing"
)
type User struct {
	Name string
	App  string
}
type fakeRepository struct {
}
type fakeProperties struct {
	DefVarSlice   []string `default:"${app.name}"`
	DefProfiles   []string `default:"${app.profiles.include}"`
	Name          string   `default:"should not inject this default value as it will inject by system.Builder"`
	Nickname      string   `default:"should not inject this default value as it will inject by system.Builder"`
	Username      string   `default:"should not inject this default value as it will inject by system.Builder"`
	Url           string   `default:"should not inject this default value as it will inject by system.Builder"`
	DefStrVal     string   `default:"this is default value"`
	DefIntPropVal int      `default:"${prop.value:123}"`
	DefIntVal     int      `default:"123"`
	DefIntVal8    int8     `default:"12"`
	DefIntVal16   int16    `default:"123"`
	DefUintVal32  int32    `default:"1234"`
	DefUintVal64  int64    `default:"12345"`
	DefIntValU    uint     `default:"123"`
	DefIntValU8   uint8    `default:"12"`
	DefIntValU16  uint16   `default:"123"`
	DefUintValU32 uint32   `default:"1234"`
	DefUintValU64 uint64   `default:"12345"`
	DefFloatVal64 float64  `default:"0.1231"`
	DefFloatVal32 float32  `default:"0.1"`
	DefBool       bool     `default:"true"`
	DefSlice      []string `default:"jupiter,mercury,mars,earth,moon"`
}
type fooProperties struct {
	at.ConfigurationProperties `value:"foo"`
	Name string `default:"foo"`
}
type fakeConfiguration struct {
	app.Configuration
	FakeProperties *fakeProperties
}
func newFakeConfiguration(properties *fakeProperties) *fakeConfiguration {
	return &fakeConfiguration{FakeProperties: properties}
}
type fakeDataSource struct {
}
type FakeRepository interface {
}
type FooUser struct {
	Name string
}
type fakeTag struct {
	at.Tag `value:"fake"`
	inject.BaseTag
}
func newFakeTag() inject.Tag {
	return &fakeTag{}
}
type Tag struct {
	inject.BaseTag
}
func (c *fakeConfiguration) FakeRepository() FakeRepository {
	repo := new(fakeRepository)
	return repo
}
func (c *fakeConfiguration) FooUser() *FooUser {
	u := new(FooUser)
	u.Name = "foo"
	return u
}