У меня есть некоторые объекты, которые я хочу подключить динамически к моему приложению Play. И один главный объект, который контролеры им:Динамически создавать объекты по полному имени, указанному в файле
trait MyObjectTrait {
def run(): Unit
}
object MyObject1 extends MyObjectTrait {
//......
}
object MyObject2 extends MyObjectTrait {
//......
}
object MyObject3 extends MyObjectTrait {
//......
}
object Manager {
def runAll(): Unit = {
val objects = getObjects()
objects foreach run
}
}
Я хочу, чтобы иметь возможность быть определить, какие из них являются активными в мое приложение, указав их в конфигурационном файле:
<objectsToRun>
<add name="obj1" fullName="myapp.modules.module1.MyObject1" />
<add name="obj2" fullName="myapp.modules.module112.MyObject2" />
<add name="obj3" fullName="myapp.modules.module143.MyObject434" />
<add name="obj4" fullName="myapp.modules.module14343.MyObject66" />
</objectsToRun>
Дело отметить, , Manager.runAll
будет использоваться довольно часто, примерно 1 раз в минуту. Поэтому я хотел бы кэшировать динамически созданные объекты (а не результат запустите каждого из них), читайте из config. Обратите внимание, что список объектов не будет часто меняться, в большинстве случаев он будет таким же.
- Каков же идиоматический способ сделать это?
- Какой файл следует использовать, где я могу записать объекты, которые я хочу создать?
- Как я могу динамически создавать объект и кэшировать его?
Спасибо. Но я сомневаюсь также в том, как кэшировать этот «lazy val ls = // список всех вызовов« objectsToRun »после чтения из файла»? –
Кроме того, случай «MyObject1» => whatever.package.MyObject1 подразумевает, что я должен знать имена изначально. Это жесткий код, а не СУХОЙ. что, если я не знаю имена изначально? –