向对象添加属性(或至少类似的结果)

Mic*_*ick 5 dart

首先,我正在做的事情的背景.我正在运行一个处理HttpRequests的HttpServer.

    HttpServer.bind(ADDRESS, PORT).then((HttpServer server) {
      listenSubscription = server.listen(onRequest);
    });

    void onRequest(HttpRequest request) {
      //handle request here
    }
Run Code Online (Sandbox Code Playgroud)

我想为所有这些添加一些日志记录,并且由于它的异步性质,想要为请求添加一些识别标记(因此我可以将请求收据与响应匹配,例如).里面的代码onRequest()调用一堆其他函数来做不同的事情(处理GET和POST请求等),所以简单地在顶部生成一个id是一个麻烦的解决方案,因为我必须通过所有其他的传递它函数调用.然而,我已经在HttpRequest对象周围传递,所以我认为在它上面抛出一个id字段会很好,就像在Javascript中一样,除了Dart不能那样工作.

然后想到了继承HttpRequestHttpRequestonRequest()方法,但转换方法接收的对象似乎比我需要的更麻烦和开销.

所以我问,是否有任何惯用的Dart方法将一些数据附加到现有对象?如果没有惯用的东西,那么你能想到的最简单的(代码和运行时复杂性)方法是什么?

Set*_*add 5

好吧,有一个Expando,但我不知道性能影响.

就像是:

// somewhere top level. Create this once.
final loggingId = new Expando();
...
// inside of onRequest
loggingId[request] = generateId();
...
// later inside log()
print(loggingId[request]);
Run Code Online (Sandbox Code Playgroud)

根据我的理解,Expandos就像弱参考地图.