2012-02-10 12 views
4

私のビジネスロジックの特定のクラスで静的なプロパティまたはメソッドを定義し、セッションまたはキャッシュのASP.NETサービスでどのクラスがキャッシュ可能であるかを明確にする必要があります。私は、静的なプロパティやインターフェイスのメソッドは完璧だと思っているが、C#4.0はこれをサポートしていません。C#静的なプロパティまたはメソッドを持つインターフェイス?

ジェネリック・マネージャーでは、どのクラスがキャッシュ可能であるかを評価することができます。セッション(ユーザー)またはキャッシュ(アプリケーション)のレベル。

今私は評価するためにTパラメータで空のインターフェイスを試していますが、おそらくもっと良いアプローチが存在しますか?ありがとう。

public interface ICacheable<T> 
{ 
} 

public class Country : ICacheable<CacheApplication> 
{ 
} 

public class Department : ICacheable<CacheUser> 
{ 
} 

public class Gestor<T> 
{ 
    // ... 
    if (typeof(T) is ICacheable<CacheApplication>) 
    { 
    } 
    // ... 
} 
+3

マーカーインターフェイスについて考えているときはいつも、代わりに属性が必要です。http://msdn.microsoft.com/en-us/library/z0w1kczw.aspx – millimoose

答えて

12

カスタム属性の使用はどうですか?あなたのクラスは、このようになります:

[Cacheable(Level = CacheLevels.Application)] 
public class Country { } 

[Cacheable(Level = CacheLevels.User)] 
public class Department { } 

することはでき、独自のカスタム属性を作成し、リフレクションを使用して、その値にアクセスする方法についてread here

+0

はい!私はより多くのリフレクションでレイテンシを追加するのを避けたかったのですが、わかりやすいコードが好きです。 – vladiastudillo

2

静的インタフェースを定義することはできません。静的クラスのインスタンスを作成することはできません。そのため、同じ基本クラスを持つ他のインスタンスに置き換えることはできません。

1つのクラスのシングルトンインスタンスを持ち、インターフェイスを通常どおり使用する方がよい場合があります。ファクトリパターンを通して1つだけのインスタンスと1つだけのインスタンスを強制することもできます。

関連する問題