gpt4 book ai didi

asp.net-mvc - 在 F# 中设置基本成员值

转载 作者:行者123 更新时间:2023-12-04 23:58:54 24 4
gpt4 key购买 nike

我目前正在尝试在 F# 中实现我自己的基本 View 引擎。基本上我是从 VirtualPathProviderViewEngine 继承的。

为此,我需要设置两个 View 位置,以便引擎知道在哪里查找 View 。在我的 F# 类型中,我从上面继承并尝试设置两个 View 位置如下...

type FSharpViewEngine() =
inherit VirtualPathProviderViewEngine()

let viewLocations = [| "~/Views/{1}/{0}.fshtml"; "~/Views/Shared/{0}.fshtml" |]

member this.ViewLocationFormats = viewLocations
member this.PartialViewLocationFormats = viewLocations

上面的代码省略了 VirtualPathProviderViewEngine 所需的覆盖。
我运行该项目并收到一条错误消息说

The property 'ViewLocationFormats' cannot be null or empty.



我假设这意味着我没有正确设置上面的两个基本成员。我只是错误地分配了上述内容,还是您怀疑我做错了什么?

作为额外的信息,我在启动时在 Global.fs (global.asax) 中添加了 ViewEngine,就像这样......
ViewEngines.Engines.Add(new FSharpViewEngine())

最佳答案

如果你只是想设置基类的属性,那么你不需要 memberoverride ,但您需要使用赋值运算符 <-在构造函数中。要实现引擎,您需要覆盖它定义的两个抽象方法,因此您需要这样的东西:

type FSharpViewEngine() =
inherit VirtualPathProviderViewEngine()

let viewLocations = [| "~/Views/{1}/{0}.fshtml"; "~/Views/Shared/{0}.fshtml" |]
do base.ViewLocationFormats <- viewLocations
base.PartialViewLocationFormats <- viewLocations

override x.CreatePartialView(ctx, path) = failwith "TODO!"
override x.CreateView(ctx, viewPath, masterPath) = failwith "TODO!"

关于asp.net-mvc - 在 F# 中设置基本成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com