Map的ナ物のBindを如何したら良いのだろう?
こんな物かいて、ムリヤリ対応したけれど
普通は、どうやってるのだろう?
// normal-parser binder.bind(Parser.class) .annotatedWith(Names.named("plain_text")) .to(PlainTextParser.class); binder.bind(Parser.class) .annotatedWith(Names.named("var")) .to(VarMethodParser.class); binder.bind(Parser.class) .annotatedWith(Names.named("rep")) .to(RepMethodParser.class); binder.bind(Parser.class) .annotatedWith(Names.named("each")) .to(EachMethodParser.class); binder.bind(Parser.class) .annotatedWith(Names.named("def")) .to(DefMethodParser.class); // layout-parser binder.bind(Parser.class) .annotatedWith(Names.named("layout")) .to(LayoutParentMethodParser.class); binder.bind(Parser.class) .annotatedWith(Names.named("layout_capture")) .to(LayoutCaptureMethodParser.class); binder.bind(Parser.class) .annotatedWith(Names.named("layout_replace")) .to(LayoutReplaceMethodParser.class); // map binder.bind(ParserMap.class).to(ParserMapHtml.class);
private static class ParserMapHtml implements ParserMap { private HashMap<String,Parser> hash = new HashMap<String, Parser>(); @Inject public void _(@Named("plain_text") Parser parser){hash.put("",parser);} @Inject public void var(@Named("var") Parser parser){hash.put("var",parser);} @Inject public void rep(@Named("rep") Parser parser){hash.put("rep",parser);} @Inject public void each(@Named("each") Parser parser){hash.put("each",parser);} @Inject public void def(@Named("def") Parser parser){hash.put("def",parser);} @Inject public void layout(@Named("layout") Parser parser){hash.put("layout",parser);} @Inject public void layout_capture(@Named("layout_capture") Parser parser){hash.put("layout.capture",parser);} @Inject public void layout_replace(@Named("layout_replace") Parser parser){hash.put("layout.replace",parser);} @Override public Parser get(String key) throws NoSuchParserMethodException { final Parser parser=hash.get(key); if(parser==null) { throw new NoSuchParserMethodException("method is [" + key + "]"); } return parser; } }