我试图坚持六角形的体系结构,并且具有以下模型:
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)