4

我正在尝试使用afBedSheet 框架以Fantom编程语言创建一个新的 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] [info] [web] 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 Method)
        在 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)

我在这里想念什么?

4

1 回答 1

2

啊,似乎 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 中修复。

于 2013-11-02T10:22:48.577 回答