2010-11-22 6 views
1

私は、多言語システムを持っており、すべての私はすべてのクラスで「ラッパーのプロパティ」を呼ぶようなものを持っている場所の上に、例えば:私は、すべての翻訳可能のためにコピーして、そのコードを貼り付けます.NET 4、属性やその他のOOP機能を使用してこのコードを簡略化することはできますか?

Public Property Name(Optional ByVal ForceLanguageCode As String = Nothing) As String 
    Get 
     Return Translations.GetByCode(Me.EntityID, "name", ForceLanguageCode) 
    End Get 
    Set(ByVal value As String) 
     Translations.SetByCode(Me.EntityID, "name", value, ForceLanguageCode) 
    End Set 
End Property 

フィールド。

私は、何とか1行のコードでそれをクラスに置き換えることができることを期待しています。毎回変更されるのは、「名前」、「タイトル」、「件名」など、フィールドの名前だけです。これは少し浪費しているようですが、私のシステムは開発者のために可能です。

私は、属性にいくつかの研究をしましたが、私はそれはのように私の答えだとは思わない:私はこれがどこLINQのエンティティを延長している、特にとして、自動的にオブジェクトをインスタンス化する方法がわからない

1) New()シグネチャはすでにDBMLによって生成されています。私の現在の技術は静的関数を使用しています。

2)「エンティティID」はリアルタイム情報であり、コンパイル時ではありません。

誰も私がこの混乱をきれいにする方法を提案できますか?

答えて

1

代わりの文字列を使用すると、ラムダを使用することができます:あなたは、少なくともコンパイル時のチェックを取得
Retrieving Property name from lambda expression
その方法。

スタックウォークを使用して、呼び出し元のメソッド、つまり関連付けられたプロパティを推測できます。したがって、プロパティを手動で参照する必要はありません。しかし、私はそのアプローチが嫌いです。

PostSharpのようなILリライタでaspect-orientated programmingを実行できます。次に、手動コードを属性で置き換えることができます。 PostSharpはその属性を持つ適切なサイトに定型コードを追加します。

しかし、ローカリゼーションの全体的なデザインが良好かどうかはわかりません。私はこれをこのようにして見たことがありません。そして、私はセッターが何をするのか分からない。

+0

ご了承ください。私は自分の問題を解決しようとするとMVCのTryUpdateModelがどのように動作するかを理解することが有用であると考えていますが、これは何らかの方法でプロパティを調べて属性などをチェックしているようです。 –

関連する問題