Перехват, связанный с уровнем метода, с помощью простого инжектора
С Unity я могу быстро добавить перехват на основе атрибутов, как это
public sealed class MyCacheAttribute : HandlerAttribute, ICallHandler
{
public override ICallHandler CreateHandler(IUnityContainer container)
{
return this;
}
public IMethodReturn Invoke(IMethodInvocation input, GetNextHandlerDelegate getNext)
{
// grab from cache if I have it, otherwise call the intended method call..
}
}
Тогда я регистрируюсь в Unity следующим образом:
container.RegisterType<IPlanRepository, PlanRepository>(
new ContainerControlledLifetimeManager(),
new Interceptor<VirtualMethodInterceptor>(),
new InterceptionBehavior<PolicyInjectionBehavior>());
В моем коде репозитория я могу выборочно декорировать определенные методы для кэширования (со значениями атрибутов, которые можно настраивать индивидуально для каждого метода):
[MyCache( Minutes = 5, CacheType = CacheType.Memory, Order = 100)]
public virtual PlanInfo GetPlan(int id)
{
// call data store to get this plan;
}
Я изучаю похожие способы сделать это вПростой инжектор, Из того, что я прочитал и искал, похоже, что доступен только перехват уровня интерфейса / типа. Но мне бы хотелось, чтобы вариант украшать отдельные методы с этим типом контролируемого поведения перехвата. Любой совет?
[Редактировать: перемещеноAutofac к егособственный вопрос сосредоточить внимание на этом вопросе]