我正在尝试使用FantomafBedSheet 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.contributeFactoryDe​​faults中定义的类型'afIocConfig::FactoryDe​​faults'不存在服务。
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中修复。

08-16 18:43