我正在尝试使用Fantom以afBedSheet framework编程语言创建一个新的Web应用程序,但无法运行最简单的示例。
代码是:
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-Nov-13] [info] [afBedSheet]在端口12345上启动BedSheet WebApp'mt::AppModule'
[08:49:36 02-Nov-13] [信息] [网络] WispService在端口12345上启动
[08:49:36 02-Nov-13] [info] [afBedSheet]找到了mod'mt::AppModule'
[08:49:36 02-Nov-13] [info] [afIoc]为mt::AppModule添加模块定义
[08:49:36 02-Nov-13] [info] [afIoc]为afBedSheet::BedSheetModule添加模块定义
afIoc::IocErr:在提供方法afBedSheet::BedSheetModule.contributeFactoryDefaults中定义的类型'afIocConfig::FactoryDefaults'不存在服务。
Ioc操作跟踪:
[1]建立IoC注册中心
[2]验证贡献定义
堆栈跟踪:
在fan.afIoc.IocErr.make(Errs.fan:15)
在fan.afIoc.Utils.stackTraceFilter(Utils.fan:63)
在fan.afIoc.RegistryBuilder.build(RegistryBuilder.fan:112)
在fan.afBedSheet.BedSheetWebMod.onStart(BedSheetWebMod.fan:119)
在fan.wisp.WispService.onStart(WispService.fan:72)
在fan.sys.Service $ .start(Service $ .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)
在fan.sys.List.each(List.java:555)
在fan.afBedSheet.Main.startServices(Main.fan:54)
在fan.afBedSheet.Main.run(Main.fan:48)
在fan.util.AbstractMain.main(AbstractMain.fan:370)
在sun.reflect.NativeMethodAccessorImpl.invoke0( native 方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(未知来源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)
在java.lang.reflect.Method.invoke(未知来源)
在fan.sys.Method.invoke(Method.java:559)
在fan.sys.Method $ MethodFunc.callOn(Method.java:230)
在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)
我在这里想念什么?
最佳答案
嗯,似乎没有将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定义为pod meta。然后仅使用pod名称启动BedSheet:fan afBedSheet mt 12345
将afIocConfig拆分到自己的pod中时,这是v1.0.16中的一个问题-测试通过,因为afBedSheet本身依赖于afIocConfig。噢!
此问题应在afBedSheet v1.1.0中修复。