如何通过guice注入属性而不将其显式添加到init块中

时间:2019-05-16 14:59:58

标签: kotlin guice

我试图坚持六角形的体系结构,并且具有以下模型:

  • QuestionStepContent
  • SingleSelectorStepContent

两者均从WorkflowStepContent开始。 我还有一个服务HtmlToMarkupConverter,在模型层中定义为接口,由基础结构层中的类实现。 我使用guice作为注入器,但是通过传递valueObjects直接实例化模型抛出new。我正在寻找一种既不错又简洁的方式来注入服务。下面发布的代码可以工作,但是init块不是我喜欢的聪明方法。有没有其他方法可以在不使用init块且不以编程方式将guice插入模型的情况下注入服务?即通过注解为显式实例化的类注入属性。

sealed class WorkflowStepContent constructor (
    open val id: String,
    val htmlContent: String? = null
) {
    var converter: HtmlToMarkupConverter
    val markupContent: String?

    init {
        var injector = Guice.createInjector(DiagnosticsModule())
        converter = injector.getInstance(HtmlToMarkupConverter::class.java)
        markupContent = converter(htmlContent)
    }
}

data class QuestionStepContent(
    override val id: String,
    val title: String,
    val options: List<Option>
) : WorkflowStepContent(id)

data class SingleSelectorStepContent(
    override val id: String,
    val title: String,
    val options: List<Option>,
    val signalName: String,
    val valueKey: String
) : WorkflowStepContent(id)

0 个答案:

没有答案