Невозможно при обычных стратегиях перехвата.
Но большинство AOP Framework, работающих во время компиляции, могут это сделать. (пример: PostSharp)
Я работаю с открытым исходным кодом NConcern AOP Framework .
Это простая .NET AOP Framework, позволяющая перехватывать во время выполнения путем обмена методами.
Он может выполнять свою работу для виртуальных, не виртуальных и статических методов без каких-либо фабричных шаблонов и потребностей наследования.
Моя рекомендация - избегать использования AOP для «обезьяньего патча», а статические методы должны быть только «синглтонными ярлыками», а не обычным потоком.
в вашем случае проще использовать одноэлементный шаблон со статическими методами, такими как shortcup и DI (Dependency Injection), чтобы включить простой прокси-шаблон.
Пример:
интерфейс
public interface IRepository
{
IQueryable<T> Query<T>()
where T : class;
}
сахар с использованием DI (через фабрику)
static public class Repository
{
//You can wrap the interface (proxy) here if you need...
static private readonly IRepository m_Repository = MyDIFactory.Import<IRepository>();
static public IQueryable<T> Query<T>()
where T : class
{
return Repository.m_Repository.Query<T>();
}
}
Использование
Repository.Query<T>().CacheForMinutes(10);
Repository.Query<T>().LogWhenErrorOccurs();