我试图将此示例从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外部传递内容?
答案 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不够熟悉,除了文档说明之外,还会给你提供具体的建议。