簡體   English   中英

無法在普通實用程序類中注入配置Play Framework 2.5.x

[英]Unable to Inject Configuration in normal utility classes Play Framework 2.5.x

我無法在普通實用程序類中注入配置,在控制器類中可以正常工作。

@Inject配置配置

public class EmailService { 
    public static boolean sendEmail(final AppUser appUser,final String mailString,String subject) { 
        final Properties props = new Properties(); 
        final String auth = Play.application().configuration().getString("mail.smtp.auth‌​")
        final String starttls = Play.application().configuration().getString("mail.smtp.star‌​ttls.enable"); 
    } 
}

實際上,我想刪除Depricated Play.application()並想使用Configuration來在該類中注入Configuration。

依賴注入框架在構造對象實例時注入依賴,因此,如果要使用插入組件的方法,它必須是非靜態的。

您想要執行以下操作,使sendEmail方法為非靜態方法,並提供一個接口:

@ImplementedBy(EmailServiceImpl.class)
public interface EmailService {
    void sendEmail(AppUser appUser, String mailString, String subject);
}

@Singleton
public class EmailServiceImpl implements EmailService {
    private final Configuration config;

    @Inject
    public EmailServiceImpl(Configuration config) {
        this.config = config;
    }

    public void sendEmail(AppUser appUser, String mailString, String subject) {
        final Properties props = new Properties(); 
        final String auth = config.getString("mail.smtp.auth‌​")
        final String starttls = config.getString("mail.smtp.star‌​ttls.enable");
    }
}

然后將EmailService實例注入到您的控制器構造函數中。

注意:為簡單起見,這里使用@ImplementedBy ,但您也可以在Guice模塊中配置綁定,從而允許在測試中模擬它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM