// Pre-requisites
import (
	"context"
	"fmt"

	cconf "github.com/pip-services3-gox/pip-services3-commons-gox/config"
	cref "github.com/pip-services3-gox/pip-services3-commons-gox/refer"
	rpcclnt "github.com/pip-services3-gox/pip-services3-rpc-gox/clients"
)


// Direct client
type MyDirectClient struct {
	*rpcclnt.DirectClient
	dependencyResolver *cref.DependencyResolver
	controller         *MyController
}

func NewMyDirectClient() *MyDirectClient {
	c := &MyDirectClient{}
    c.dependencyResolver = cref.NewDependencyResolver()
	c.dependencyResolver.Put(context.Background(), "controller", cref.NewDescriptor("pip-services", "controller", "*", "*", "1.0"))
	return c
}

func (c *MyDirectClient) SetReferences(ctx context.Context, references cref.IReferences) {
	c.dependencyResolver.SetReferences(ctx, references)
	res, err := c.dependencyResolver.GetOneRequired("controller")
	if err != nil {
		panic(err)
	}
	c.controller = res.(*MyController)
}

func (c *MyDirectClient) MyMethod() {
	c.controller.MyMethod()
}

// Instantiation
client := NewMyDirectClient();