2012-02-10 43 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 2012-02-10 22:34:46

回答

12

如何使用自定義屬性?然後你會課看起來是這樣的:

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

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

您可以read here關於如何創建自己的自定義屬性,然後通過反射訪問它的價值。

+0

是的!它看起來是最清晰的路線..我想避免添加更多反射延遲,但我也更喜歡更可讀的代碼。 – vladiastudillo 2012-02-13 13:57:50

2

你不能定義靜態接口,一方面,你不能創建靜態類的實例,所以你不能用相同的基類替換他們。

你可能更好的是擁有一個類的單例實例並像平常一樣使用接口。您也可以通過工廠模式強制執行一個和一個唯一的實例。