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