我正在尝试在F#中实现一个简单的生成类型提供程序.弹出的一件事是,显然生成一个包含泛型方法调用的引用,其中泛型类型参数被生成的类型替换不受支持.一个演示此行为的简单示例:
首先,定义一个通用方法和一些utils:
module Printer =
let print (name: string) (value: 'T) =
printfn "%s: %O" name value
module Provided =
let property name propertyType value =
ProvidedProperty(name, propertyType, GetterCode = (fun _ -> value))
let ctor () = ProvidedConstructor([], InvokeCode = (fun _ -> <@@ () @@>))
Run Code Online (Sandbox Code Playgroud)
然后,在类型提供程序中,another定义以下简单类型:
let providerTempAssembly = Path.ChangeExtension(Path.GetTempFileName(), ".dll") |> ProvidedAssembly
let provider = ProvidedTypeDefinition(asm, ns, "Provider", Some typeof<obj>, IsErased = false, HideObjectMethods = true)
// Create empty "AnotherType" type with parameterless constructor
let …Run Code Online (Sandbox Code Playgroud)