4 people like it.
    Like the snippet!
  
  Ugly hack to call F# functions as static methods
  Ugly hack to call F# functions as static methods
  |  1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
11: 
12: 
13: 
14: 
15: 
16: 
17: 
18: 
19: 
20: 
21: 
22: 
23: 
24: 
25: 
26: 
27: 
28: 
29: 
30: 
31: 
 | module Reflected =
    open System.Reflection
    let private apiTypes = ConcurrentMutableDict<string, System.Type>()
    let private bindingFlags = BindingFlags.Static ||| BindingFlags.Public
    let private assembly = 
      AppDomain.CurrentDomain.GetAssemblies() 
        |> Array.find (fun x -> x.FullName.StartsWith("IronJS,"))
    let rec methodInfo type' method' =
      let found, typeObj = apiTypes.TryGetValue type'
      if found then typeObj.GetMethod(method', bindingFlags)
      else
        match assembly.GetType("IronJS." + type', false) with
        | null -> null
        | typeObj ->
          apiTypes.TryAdd(type', typeObj) |> ignore
          methodInfo type' method'
    let rec propertyInfo type' property =
      let found, typeObj = apiTypes.TryGetValue type'
      if found then typeObj.GetProperty(property, bindingFlags)
      else
        let types = assembly.GetTypes()
        match assembly.GetType("IronJS." + type', false) with
        | null -> null
        | typeObj ->
          apiTypes.TryAdd(type', typeObj) |> ignore
          propertyInfo type' property
 | 
namespace System
namespace System.Reflection
val private apiTypes : obj
Full name: Script.Reflected.apiTypes
Multiple items
val string : value:'T -> string
Full name: Microsoft.FSharp.Core.Operators.string
--------------------
type string = System.String
Full name: Microsoft.FSharp.Core.string
type Type =
  inherit MemberInfo
  member Assembly : Assembly
  member AssemblyQualifiedName : string
  member Attributes : TypeAttributes
  member BaseType : Type
  member ContainsGenericParameters : bool
  member DeclaringMethod : MethodBase
  member DeclaringType : Type
  member Equals : o:obj -> bool + 1 overload
  member FindInterfaces : filter:TypeFilter * filterCriteria:obj -> Type[]
  member FindMembers : memberType:MemberTypes * bindingAttr:BindingFlags * filter:MemberFilter * filterCriteria:obj -> MemberInfo[]
  ...
Full name: System.Type
val private bindingFlags : BindingFlags
Full name: Script.Reflected.bindingFlags
type BindingFlags =
  | Default = 0
  | IgnoreCase = 1
  | DeclaredOnly = 2
  | Instance = 4
  | Static = 8
  | Public = 16
  | NonPublic = 32
  | FlattenHierarchy = 64
  | InvokeMethod = 256
  | CreateInstance = 512
  ...
Full name: System.Reflection.BindingFlags
field BindingFlags.Static = 8
field BindingFlags.Public = 16
val private assembly : obj
Full name: Script.Reflected.assembly
module Array
from Microsoft.FSharp.Collections
val find : predicate:('T -> bool) -> array:'T [] -> 'T
Full name: Microsoft.FSharp.Collections.Array.find
val x : obj
val methodInfo : type':'a -> method':'b -> 'c (requires 'c : null)
Full name: Script.Reflected.methodInfo
val type' : 'a
val method' : 'b
val found : bool
val typeObj : obj
System.Object.GetType() : System.Type
val ignore : value:'T -> unit
Full name: Microsoft.FSharp.Core.Operators.ignore
val propertyInfo : type':'a -> property:'b -> 'c (requires 'c : null)
Full name: Script.Reflected.propertyInfo
val property : 'b
val types : obj
  
  
  More information