NancyFx F#App带参数

时间:2018-05-31 02:06:47

标签: f# nancy

我试图将此示例从C#翻译为F#

public class MyModule : NancyModule
{
    private IMyDependency _dependency;

    public MyModule(IMyDependency dependency)
    {
        _dependency = dependency;

        Get["/"] = x =>
        {
        };

        // Register other routes
    }
}

(来源1

但是向构造函数

添加参数
  type HelloModule(dependency) as self = 
    inherit NancyModule()
    do
      self.Get.["/"] <- fun _ -> "Hello" :> obj

(来源2

导致运行时异常:System.InvalidOperationException:&#39;尝试在合成期间满足其中一个依赖项时出错...

如何正确地将类似数据源的依赖项添加到代码中?或者,通常,我如何从HelloModule外部传递内容?

1 个答案:

答案 0 :(得分:3)

我猜这可能是因为没有在F#代码中指定构造函数的dependency参数的类型。这将导致F#编译器为该参数分配泛型类型,然后Nancy的依赖注入框架不知道要注入什么。

尝试以下操作,看看它是否解决了您的问题:

type HelloModule(dependency : IMyDependency) as self = 
  inherit NancyModule()
  do
    self.Get.["/"] <- fun _ -> "Hello" :> obj

P.S。当然,为了实现这一点,您还需要一些实现IMyDependency接口的类型,并告诉Nancy框架该类型。从您链接到的this part of the Nancy documentation,看起来只是声明类型就足够了,但如果这还不够,那么您必须手动注册该类型。我对Nancy不够熟悉,除了文档说明之外,还会给你提供具体的建议。