1

私は、PlayFramework(java)とGuiceをDI用にpac4jとともに使用しています。これは私のGuiceモジュールがpac4j demo appに基づいているように見えます。コードでは、SericeDAOオブジェクトを挿入するCustomAuthenticationを渡しますが、常にnullです。guiceモジュールにサービスオブジェクトを注入する

最初の考えは、私がCustomAuthenticatorを作成してguiceを作成させるのではなく、なぜそれがnullであったかという理由によるものです。また、CustomAuthenticatorをセキュリティモジュールに直接注入しようとしましたが、customAuthenticatorオブジェクトはnullでした。私が間違っていることを確信していない。

public class SecurityModule extends AbstractModule { 

    private final Environment environment; 
    private final Configuration configuration; 

    public SecurityModule(
      Environment environment, 
      Configuration configuration) { 
     this.environment = environment; 
     this.configuration = configuration; 
    } 

    @Override 
    protected void configure() { 
     final String baseUrl = configuration.getString("baseUrl"); 

     // HTTP 
     final FormClient formClient = new FormClient(baseUrl + "/loginForm", new CustomAuthenticator()); 

     final Clients clients = new Clients(baseUrl + "/callback", formClient); 

     final Config config = new Config(clients); 
     bind(Config.class).toInstance(config); 

    } 
} 

CustomAuthenticatorのIMPL:

public class CustomAuthenticator implements UsernamePasswordAuthenticator { 

    @Inject 
    private ServiceDAO dao; 

    @Override 
    public void validate(UsernamePasswordCredentials credentials) { 
     Logger.info("got to custom validation"); 
     if(dao == null) { 
      Logger.info("dao is null, fml"); // Why is this always null? :(
     } 
    } 
} 

ServiceDAOはGuiceのモジュール

public class ServiceDAOModule extends AbstractModule { 

    @Override 
    protected void configure() { 
     bind(ServiceDAO.class).asEagerSingleton(); 
    } 

} 

答えて

1

としてあなたはあなたのコード内の2個のエラーを持って、すでにセットアップされています。

最初に、新しいを使用して構築するものは、@インジェクション作業を伴う注入がありません。 第2に、モジュールに物を注入することはできません。

この問題を解決するには、このようなコードをリファクタリングします。

  1. 他のモジュールの前にServiceDaoModuleがロードされていることを確認してください。
  2. リファクタリングセキュリティモジュールを次のように
    1. は、すべてのコンストラクタ引数を削除/全
    2. としてコンストラクタはCustomAuthenticatorとして熱心シングルトン
    3. は、プロバイダを作成してバインドバインドします。そこにあなたは@設定を注入することができます。
    4. プロバイダを作成してバインドするには、@Inject ConfigurationとFormClientを使用します。
    5. @InjectClientsというプロバイダを作成してバインドします。
+0

ありがとう。それはたくさんの助けになりました。 – Raunak

関連する問題