簡體   English   中英

如何在HK2中注入未綁定的泛型類型?

[英]How to inject an unbound generic type in HK2?

我正在使用Jersey 2.9編寫Web服務,並且還在使用DI的HK2。 我有一個類處理與數據庫的連接,該連接可以像這樣實例化:

public class DBHandler {
  private DBConnection<?> dbConnection;

  @Inject
  public DBHandler(DBConnection<?> dbConnection) {
    this.dbConnection = dbConnection;
  }
}

如您所見,字段dbConnection具有無限的泛型類型。 通過綁定實現當前看起來如下:

public class MyProductionBinder extends AbstractBinder {

   @Override
   protected void configure() {
     bind(ClientServerDBConnection.class).to(new TypeLiteral<DBConnection<?>>() {});
   }
}

但是,在運行時會引發以下異常;

Caused by: org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at Injectee(requiredType=DBConnection<?>,parent=DBHandler,qualifiers={}),position=0,optional=false,self=false,unqualified=null,731556610)

如果我將DBHandler的變量聲明變成這樣的原始類型:

public class DBHandler {
  private DBConnection dbConnection;

  @Inject
  public DBHandler(DBConnection dbConnection) {
    this.dbConnection = dbConnection;
  }
}

它像預期的那樣工作。

我會錯過什么嗎?還是在HK2中無法指定這樣的綁定?

最好的祝福,
安德烈亞斯

HK2使用與CDI相同的類型匹配規則,這意味着注入DBConnection的用例將無法正常工作,而僅使用DBConnection即可。 如果這對您來說足夠重要,請輸入一個Jira,我們可以考慮讓HK2偏離CDI規則。 我也認為DBConnection也可以。

暫無
暫無

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

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