如何使用元数据标记的Retrive函数 [英] How retrive function that marks with metadata

查看:154
本文介绍了如何使用元数据标记的Retrive函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

查看以下代码段。

  import dart:mirrors; 

class meta {
final String data;

const meta(this.data);
}


@meta(Tag)
doSomething()=> print(你必须做某事);

void main(){
doSomething();
}

如何检索功能,即市场带有元数据标签?在我的例子中,我想知道,哪个方法标有元标签。

解决方案

  void main(){
doSomething );
getMetaData();
}

void getMetaData(){
LibraryMirror currentLib = currentMirrorSystem()。libraries.values.last;
currentLib.declarations.forEach {
if(mirror.metadata.length> 0){
print('Symbol $ s has MetaData:$ { mirror.metadata.first.reflectee.data}');
}
});
}

这应该给你:




符号符号(doSomething)有MetaData:Tag

您还可以从另一个项目分析文件,并在该文件上使用dart:mirrors,而不是检查当前库。可能 libraries.values.last 不会总是返回当前库 - 因此您可能需要更改它。在我的情况下,它工作。


Look at the following code snippet.

import "dart:mirrors";

class meta {
    final String data;

    const meta(this.data);
}


@meta("Tag")
doSomething() => print("You have to do something");

void main() {
    doSomething();
}

How can I retrieve functions, that is market with metadata tags? In my example, I want to find out, which method is marked with meta tags.

解决方案

you could do something like this:

void main() {
    doSomething();
    getMetaData();
}

void getMetaData() {
  LibraryMirror currentLib = currentMirrorSystem().libraries.values.last;
  currentLib.declarations.forEach((Symbol s, DeclarationMirror mirror) {
    if(mirror.metadata.length > 0) {
      print('Symbol $s has MetaData: "${mirror.metadata.first.reflectee.data}"');
    }
  });
}

This should give you:

You have to do something
Symbol Symbol("doSomething") has MetaData: "Tag"

You could also analyze your files from another project and use dart:mirrors on that file instead of inspecting the current library. Maybe libraries.values.last will not always return the current library - so you might need to change it. In my case it worked.

这篇关于如何使用元数据标记的Retrive函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆