使Guice喷射器单例保持一致

| 我想知道通常如何使用喷油器。我了解它主要在启动时使用,但是您如何在运行时使用它来创建某个实现的对象? 例如,我有一个用户界面,其中包含用户A,用户B和用户C的实现。我在运行时使用Guice的想法是将其包装在Singleton类中,这样我就可以检索它,而不是每次要创建User对象的实例时都创建一个新的注射器。
//Create in singleton wrapper class
Injector injector = Guice.createInjector(new SecurityModule());

//Retrieve and use at run-time (Manager is the singleton wrapper class)
Injector injector = Manager.getInstance().getInjector();
User user = injector.getInstance(User.class);
这是通常的做法吗?基本上,我想确保集中所有配置,以减少错误(例如,使用错误的模块)。它也更易于管理,因此,如果我决定使用其他配置模块,则可以在一个类中进行更改,而不是在使用它的每个Java类中进行更改。 谢谢, 插口     
已邀请:
除极少数特殊情况外,您无需在应用程序中直接使用ѭ1,即使如此,您也绝对不应将其设置为静态Singleton。如果您希望能够使用Guice在应用程序中的某个位置检索
User
的新实例,则只需注入
Provider<User>
并在需要时对其调用
get()
。     
我会写:
public class Manager {
    private static Manager instance;
    // getInstance singleton method left out for brevity
    private Injector injector;
    private Manager() {
        injector = Guice.createInjector(...);
    }
    public <T> T get(Class<? extends T> cls) {
        return injector.getInstance(cls);
    }
}
所以你可以做
Manager.getInstance().get(User.class)
,并且不必使用Guice的Injector,从而使您可以更改Dependency Injection框架,而无需更改应用程序代码。     

要回复问题请先登录注册