简体   繁体   English

如何在Guice中传递构造函数参数

[英]How to pass constructor parameter in Guice

I have a Swing class: 我有一个Swing班:

public class PopUpContextMenu extends JPopupMenu {
    public PopUpContextMenu() {
        super();

        JMenuItem loginMenuItem = new LoginMenuItem("Login");
        JMenuItem logoutMenuItem = new LogoutMenuItem("Logout");
        add(loginMenuItem);
        add(logoutMenuItem);
    }
}

I wat to change it to use Guice so that the two "new" statement can be removed. 我努力将其更改为使用Guice,以便可以删除两个“新”语句。 I want something like: 我想要类似的东西:

public class PopUpContextMenu extends JPopupMenu {
    @Inject
    public PopUpContextMenu(JMenuItem loginMenuItem, JMenuItem logoutMenuItem) {
        super();
        add(loginMenuItem);
        add(logoutMenuItem);
    }
}

My question is how can I configure bindings in Guice so that I can pass the string "Login" when constructing loginMenuItem and pass string "Logout" when constructing logoutMenuItem? 我的问题是如何在Guice中配置绑定,以便在构造loginMenuItem时可以传递字符串“ Login”,而在构造logoutMenuItem时可以传递字符串“ Logout”?

Many thanks 非常感谢

You could use @Named annotation for that: 您可以使用@Named注释:

In your class: 在您的课程中:

@Inject
@Named("LOGIN")
JMenuItem loginMenuItem;

@Inject
@Named("LOGOUT")
JMenuItem logoutMenuItem

So then in your Guice module configure() method you do: 因此,在Guice模块的configure()方法中,您可以执行以下操作:

bind(JMenuItem.class).annotatedWith(Names.named("LOGIN")).toInstance(new LoginMenuItem("Login"));
bind(JMenuItem.class).annotatedWith(Names.named("LOGOUT")).toInstance(new LoginMenuItem("Logout"));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM