2009-07-15 4 views
2

属性への何らかの方法(または別の別個のアプローチ)が、彼に装飾されているものについて何かを知っているかどうかを知る必要があります。例えば:私は家のオブジェクトにいくつかの前処理を行う必要がありますMyAttributeインサイド装飾されたメンバに関する情報をC#の属性で取得する

class Cat 
{ 
    public Cat() { } 

    [MyAttribute] 
    public House House { get; set; } 
} 

...

class MyAttribute : Attribute 
{ 
    public MyAttribute() 
    { 
     var ob = // Discover the decorated property, do some changes and set it again 
    } 
} 

、それは良い方法だ場合、私は知らない、どちらもそれが実際に行うことができる場合

答えて

3

これは属性の仕組みではありません。それらは単に何かに追加されたコンパイル時のメタデータです。彼らは自分では何も達成しません。実行時に、コードはそのメタデータを使用して処理を行うことができます。

UPDATE:私は理解し、基本的に、あなたは二つのことを達成しようとしています。 1つは、いくつかのプロパティをロードしないようにリポジトリに指示することです。この目的のために属性を使用することができますが、リポジトリコードはエンティティタイプのリフレクションを使用し、最初にロードしないでください。もう1つは、最初に呼び出されたときにプロパティをロードすることです。各呼び出しですでにロードされているかどうかをチェックし、呼び出されたときにロードする必要があります。これは、手動でそのようなコードを挿入するか、コードを後処理し、属性を調べてメソッド呼び出しを自動的に挿入できるPostSharpのようなものを使用することで実現できます。おそらく、これはあなたが最初に求めたものです。

+0

ここで正しい方法は何でしょうか? – Alaor

+0

おそらく、実際の問題について言及して、最良の解決策を得るべきでしょう。もっと明確に*最初に何を達成しようとしていますか? –

+0

データベースとの遅延読み込みの何人か。私は私のオブジェクトに複雑なフィールドを持っていて、私はそれらをオブジェクト自体と一緒に読み込むことを望んでいない、私は方法を作ることができるが、私の目標は、将来的に拡張可能な何かをすることである。私のレポは、実際に自動ロードの終わりに私が求めているオブジェクトのプロパティを設定する、私は最初にその大きな小道具にこれをしないように彼に指示する方法を与える必要があるときにその小道具への呼び出しをラップし、私は自分の時間を失っていますか? – Alaor

1

あなたが望むのは、EntLibのPolicy Injection application blockです。

開発者は、一連のポリシーの 面でのオブジェクトの 横断動作を指定するポリシー インジェクションアプリケーションブロックを使用することができます。ポリシー は、クライアントコード は、クラスのメソッドを呼び出したときに実行 ハンドラのシリーズの組み合わせであると-と クラスとクラス メンバーを選択するマッチングルール の属性ベース 政策シリーズの例外(メソッドとプロパティ)を に適用し、アプリケーションブロックはハンドラを に割り当てます。

+0

私はリンクを用意するつもりです!光に感謝! – Alaor

関連する問題