(ini adalah pertanyaan terkait dengan yang ini yang untuk SimpleInjector. Saya dulu disarankan untuk membuat pertanyaan terpisah untuk setiap wadah IoC.)
Dengan Unity, saya dapat dengan cepat menambahkan intersepsi berbasis atribut seperti ini
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..
}
}
Lalu saya mendaftar ke Unity dengan cara ini:
container.RegisterType<IPlanRepository, PlanRepository>(new ContainerControlledLifetimeManager(),
new Interceptor<VirtualMethodInterceptor>(),
new InterceptionBehavior<PolicyInjectionBehavior>());
Dalam kode repositori saya, saya dapat secara selektif mendekorasi metode tertentu untuk di-cache (dengan nilai atribut yang dapat disesuaikan secara individual untuk setiap metode):
[MyCache( Minutes = 5, CacheType = CacheType.Memory, Order = 100)]
public virtual PlanInfo GetPlan(int id)
{
// call data store to get this plan;
}
Saya sedang mencari cara serupa untuk melakukan hal ini di Autofac. Dari apa yang saya baca dan cari sepertinya hanya intersepsi tingkat antarmuka/tipe yang tersedia. Tapi saya ingin pilihan untuk mendekorasi metode individual dengan jenis perilaku intersepsi yang dikontrol atribut ini. Ada saran?