Я пытаюсь придерживаться шестиугольной архитектуры, и у меня есть следующие модели:
QuestionStepContent
SingleSelectorStepContent
оба простираются от WorkflowStepContent
.
У меня также есть сервис HtmlToMarkupConverter
, определенный как интерфейс на уровне модели, реализованный классом на уровне инфраструктуры.
В качестве инжектора я использую guice, но экземпляры моделей напрямую генерируют new
, передавая значениеObjects. Я ищу хороший и аккуратный способ ввести сервис. Код, приведенный ниже, работает, но блок 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)