【发布时间】:2016-08-04 13:07:39
【问题描述】:
我正在尝试构建一个属性来验证某个类型的某个实例。
为此,我必须将 ObjectInstance 转换为该类型。
我需要为该类型的成员设置属性。
所以我们需要使用and 关键字来进行循环定义。
但是在以下情况下,我得到了错误
自定义属性必须调用对象构造函数
在下面标记的行。
namespace Test
open System
open System.ComponentModel.DataAnnotations
[<AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)>]
type MyAttribute() =
class
inherit ValidationAttribute ()
override this.IsValid (value: Object, validationContext: ValidationContext) =
match validationContext.ObjectInstance with
| :? MyClass as item ->
// TODO more validation
ValidationResult.Success
| _ ->
new ValidationResult("No no no")
end
and MyClass(someValue) =
[<Required>]
[<Range(1, 7)>]
//vvvvvvvvvvvvvvv
[<MyAttribute>]
//^^^^^^^^^^^^^^^
member this.SomeValue : int = someValue
我尝试手动调用构造函数,如:
[<MyAttribute()>]
// or
[<new MyAttribute()>]
但是没有一个被系统接受。
F# 大师能帮我吗?
【问题讨论】:
标签: f# circular-dependency circular-reference