我需要在我的业务逻辑的某些类中定义静态属性或方法,以明确确定哪些类是ASP.NET服务的Session或Cache中的可缓存。我在想,界面中的静态属性或方法是完美的,但C#4.0不支持这一点。
所有需求都能够在通用管理器中评估哪些类是可缓存的,如果是,则在哪个级别:会话(用户)或缓存(应用程序)。
现在我正在尝试使用带有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>)
{
}
// ...
}
答案 0 :(得分:12)
如何使用自定义属性?然后你的课程看起来像这样:
[Cacheable(Level = CacheLevels.Application)]
public class Country { }
[Cacheable(Level = CacheLevels.User)]
public class Department { }
您可以read here了解如何创建自己的自定义属性,然后使用反射访问其值。
答案 1 :(得分:2)
你不能定义静态接口,首先,你不能创建静态类的实例,所以你不能用相同的基类代替它们。
你可能最好拥有一个类的单例实例并正常使用接口。您也可以通过工厂模式强制执行一个和一个实例。