特定の属性とタイプのletバインディングを特定のアセンブリ全体で検索しようとしています。モジュール内の属性とタイプ別にバインディングを反映する
たとえば、次の型および属性:
type TargetType = { somedata: string }
type MarkingAttribute() = inherit System.Attribute()
その後、私は、次のモジュールで値を見つけるしたいと思います:
module SomeModule =
[<Marking>]
let valueIWantToFind = {somedata = "yoyo"}
だから私は何を探していますが持つ機能であります次のシグネチャ(一般的な関数シグネチャに適していると仮定します):
let valuesOfTypeWithAttribute<'t,'attr> (assembly: Assembly) : 't list = ...
私の無駄な試みは、F#モジュールがどのようにCLR(CLI?)クラスに変換されているのか理解できないためにブロックされているようです。
open System.Reflection
let types = Assembly.GetExecutingAssembly().GetTypes()
let fiWithAttribute (attributeType: System.Type) (fi: FieldInfo) =
fi.CustomAttributes
|> Seq.exists (fun attr -> attr.AttributeType = attributeType)
let fields =
types
|> Array.collect (fun t -> t.GetFields())
|> Array.filter (fiWithAttribute typeof<MarkingAttribute>)
すべてのヘルプやポインタを非常に高く評価されます。
は、私は残念ながら何も見つかっていない、次のFSIスニペットを持っています。
使う代わりに、GetMembersれるGetFields - http://ideone.com/UIRgay –
ILSpyを使用し、スタッフが翻訳されてどのように把握します。 –