import 'package:pip_services3_commons/pip_services3_commons.dart';
import 'package:pip_services3_rpc/pip_services3_rpc.dart';

void main(List<String> argument) {
  // Instantiation
  var myController = MyController();

  // Instantiation
  var client = MyDirectClient();

  client.setReferences(References.fromTuples([
    Descriptor('pip-services', 'controller', 'controller', 'default', '1.0'),
    myController
  ]));

  client.myMethod();
}

class MyDirectClient extends DirectClient<MyController> {
  MyDirectClient() {
    dependencyResolver.put('controller',
        Descriptor('pip-services', 'controller', '*', '*', '1.0'));
  }

  @override
  void setReferences(IReferences references) {
    dependencyResolver.setReferences(references);
    controller = dependencyResolver.getOneRequired<MyController>('controller');
  }

  void myMethod() {
    controller.myMethod();
  }
}

class MyController implements IConfigurable, IReferenceable {
  void configure(ConfigParams config) {}

  void setReferences(IReferences references) {}

  void myMethod() {
    print('Hello world');
  }
}