Запуск образца afBedSheet приводит к ошибке "Служба не существует для типа" afIocConfig::FactoryDefaults ""
Я пытаюсь создать новое веб-приложение на языке программирования Fantom с использованием инфраструктуры afBedSheet, но не могу запустить самый простой пример.
Код является:
using afBedSheet
using afIoc
class AppModule {
@Contribute
static Void contributeRoutes(OrderedConfig conf) {
conf.add(Route(`/hello/**`, HelloPage#hello))
}
}
class HelloPage {
Text hello(Str name, Int iq := 666) {
return Text.fromPlain("Hello! I'm $name and I have an IQ of $iq!")
}
}
И мой build.fan выглядит так:
using build
class Build : BuildPod {
new make() {
podName = "mt"
summary = "TODO write a description here"
depends = ["sys 1.0+", "afBedSheet 1.0.16+", "afIoc 1.4.6+"]
srcDirs = [`fan/`, `test/`]
}
}
Когда я запускаю команду...
fan afBedSheet mt::AppModule 12345
... это ошибка, которую я получаю:
C: \ dev \ mt2 \ fan> fan afBedSheet mt:: AppModule 12345 [08:49:36 02.11.11] [info] [afBedSheet] Запуск простыни WebApp 'mt::AppModule' на порту 12345 [08:49:36 02-Nov-13] [info] [web] WispService запущен на порту 12345 [08:49:36 02-Nov-13] [info] [afBedSheet] Найден мод 'mt:: AppModule' [08:49:36 02.11.11] [info] [afIoc] Добавление определения модуля для mt:: AppModule [08:49:36 02-Nov-13] [info] [afIoc] Добавление определения модуля для afBedSheet::BedSheetModule afIoc::IocErr: Служба не существует для типа "afIocConfig::FactoryDefaults", определенного в методе ввода afBedSheet::BedSheetModule.contributeFactoryDefaults. Ioc Operation Trace: [ 1] Создание реестра IoC [ 2] Утверждение определений вклада Трассировки стека: на fan.afIoc.IocErr.make(Errs.fan:15) на fan.afIoc.Utils.stackTraceFilter(Utils.fan:63) в fan.afIoc.RegistryBuilder.build(RegistryBuilder.fan:112) at fan.afBedSheet.BedSheetWebMod.onStart(BedSheetWebMod.fan:119) на fan.wisp.WispService.onStart(WispService.fan:72) at fan.sys.Service$.start(Служба $.java:205) на fan.wisp.WispService.start(WispService.fan:21) на fan.afBedSheet.Main$startServices$3.doCall(Main.fan:54) на fan.afBedSheet.Main$startServices$3.call(Main.fan:54) at fan.sys.List.each(List.java:555) на fan.afBedSheet.Main.startServices(Main.fan:54) at fan.afBedSheet.Main.run(Main.fan:48) at fan.util.AbstractMain.main(AbstractMain.fan:370) at sun.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke(неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Неизвестный источник) в java.lang.reflect.Method.invoke(Неизвестный источник) at fan.sys.Method.invoke(Method.java:559) at fan.sys.Method$MethodFunc.callOn(Method.java:230) at fan.sys.Method.callOn(Method.java:139) на fanx.tools.Fan.callMain(Fan.java:175) в fanx.tools.Fan.executeType(Fan.java:140) на fanx.tools.Fan.execute(Fan.java:41) на fanx.tools.Fan.run(Fan.java:298) в fanx.tools.Fan.main(Fan.java:336)
Что мне здесь не хватает?
1 ответ
Ах, кажется, модуль IocConfig не добавляется как транзитивная зависимость, следовательно Service does not exist for Type 'afIocConfig::FactoryDefaults'
,
Самое быстрое решение - добавить следующее к вашему build.fan
:
depends = ["sys 1.0+", "afBedSheet 1.0.16+", "afIoc 1.4.6+", "afIocConfig 0+"]
meta = ["afIoc.module" : "mt::AppModule"]
То есть добавить afIocConfig
в качестве зависимости и определите свой AppModule как мета-модуль. Затем запустите простыню только с именем модуля:
fan afBedSheet mt 12345
Это проблема v1.0.16, когда afIocConfig был разделен на собственный модуль - тесты пройдены, потому что afBedSheet сам по себе зависит от afIocConfig. d'Oh!
Это должно быть исправлено в afBedSheet v1.1.0.