Я пытаюсь внедрить ehcache через Play Framework.Я внедряю его в сопутствующий класс, но этот класс создается в абстрактном классе в другом месте, а также в сопутствующем объекте.Я не хочу вводить что-либо в абстрактный класс, потому что он используется где-то еще.
Например, это, в основном, способ настройки класса-объекта и объекта-компаньона (удалены некоторая логика и расширения для лучшей читаемости):
class Setting @Inject()(cached: DefaultSyncCacheApi) {
def isCached(id:String): Boolean = {
val cachedItem = cached.get(id)
cachedItem.isDefined
}
}
object Setting {
def getId(id:String): Setting = {
val setting = new Setting //I know this doesn't work
if (setting.isCached(id)) {
//retrieval logic
}
setting
}
}
Это абстрактный класс, в котором он создается:
abstract class UsingSettingAbstract {
def methodUsingSetting(): String = {
val setting = new Setting
val str = new String
//logic in here
str
}
}
Я попытался создать пустой конструктор в классе Setting с помощью def this() { }
и создать цепочкуконструкторов, но до сих пор не удалось получить успешный ввод кэша.
Я сделал разные версии ниже, инициализируя переменную cache
с помощью cached
или пытаясь пройти через cached
:
class Setting @Inject()(cached: DefaultSyncCacheApi) {
val cache:DefaultSyncCacheApi
def this() {
this(cache)
}
}
Есть ли способ заставить DI работатьс этой настройкой, или что-то вроде заводского образца будет работать лучше?