C # интерфейс со статическим свойством или методами? - PullRequest
4 голосов
/ 11 февраля 2012

Мне нужно определить статическое свойство или метод в определенных классах моей бизнес-логики, чтобы подробно определить, какие классы являются кешируемыми в Session или Cache службы ASP.NET. Я думаю, статическое свойство или метод в интерфейсе были бы идеальными, но 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>)
    {
    }
    // ...
}

Ответы [ 2 ]

12 голосов
/ 11 февраля 2012

Как насчет использования пользовательского атрибута?Тогда ваши классы будут выглядеть примерно так:

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

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

Вы можете прочитать здесь о том, как создать свой собственный атрибут и затем получить доступ к его значению с помощью отражения.

2 голосов
/ 11 февраля 2012

Вы не можете определить статические интерфейсы, во-первых, вы не можете создавать экземпляры статических классов, поэтому вы не можете заменить их другими с тем же базовым классом.

Возможно, вам лучше иметь одноэлементный экземпляр одногокласс и использование интерфейсов, как обычно.Вы также можете использовать один-единственный экземпляр через фабричный шаблон.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...