anchor.diff:    Handler operator [](String name) => _handlers[name];
     void operator []=(String name, Handler value) => _handlers[name] = value;
     Service() {
  +    if (!_creators.containsKey('mock')) {
  +      register<MockHandler>('mock', new MockHandlerCreator());
  +    }
  +
       _invokeManager = new InvokeManager(execute);
       _ioManager = new IOManager(process);
  -    _handlerConstructors.forEach((name, ctor) => _handlers[name] = ctor(this));
  +    _creators
  +        .forEach((name, creator) => _handlers[name] = creator.create(this));
       add(new Method(_methodManager.getNames, '~'));
     }
     void bind(dynamic server, [String name]) {
  
positive.code:     try {
        final requestInfo = codec.decode(request, context as ServiceContext);
        if (timeout > Duration.zero) {
          var completer = new Completer<Uint8List>();
          var timer = new Timer(timeout,
              () => completer.completeError(new TimeoutException('Timeout')));
          _invokeManager
  
negative.code: 
  part of hprose.rpc.core;
  
  abstract class Handler<T> {
    void bind(T server);
  }
  
  abstract class HandlerCreator<T extends Handler> {
    List<String> serverTypes;
    T create(Service service);
  }
  
  class Service {
    static final Map<String, HandlerCreator> _creators = {};
    static final Map<String, List<String>> _serverTypes = {};
    static void register<T extends Handler>(
        String name, HandlerCreator<T> creator) {
      _creators[name] = creator;
      creator.serverTypes.forEach((type) {
        if (_serverTypes.containsKey(type)) {
          _serverTypes[type].add(name);
        } else {
  