2012-07-26 14 views
5

Global geri bildirimi, herhangi bir nesne çözüldüğünde tetiklenen Autofac konteynerde nasıl kaydedebilirim?Nesne çözüldüğünde Autofac - global geri arama

Yansıma kullanmak ve bir nesnenin Initialize() adlı bir yöntemi olup olmadığını kontrol etmek ve varsa bunu çağırmak istiyorum. Ben ördek yazmak istiyorum, yani hiçbir arayüz gerekli değildir.

Teşekkürler!

cevap

12

AutoFac size çeşitli yaşam boyu olaylara abone olmak IComponentRegistration arabirimini kullanabilirsiniz:

  • OnActivating

onRelease OnActivated Bir Module oluşturarak IComponentRegistration örneğini alabilirsiniz ve AttachToComponentRegistration yöntemini geçersiz kıl:

var builder = new ContainerBuilder(); 
builder.RegisterModule<EventModule>(); 

ve OnActivated yöntem her bileşen aktivasyon bileşeni kayıtlı hangi modül içinde hiçbir mater sonra adı verilecek:

public class EventModule : Module 
{ 
    protected override void AttachToComponentRegistration(
     IComponentRegistry componentRegistry, 
     IComponentRegistration registration) 
    { 
     registration.Activated += OnActivated; 
    } 

    private void OnActivated(object sender, ActivatedEventArgs<object> e) 
    { 
     e.Instance.GetType().GetMethod("Initialize").Invoke(e.Instance, null); 
    } 
} 

Şimdi sadece konteyner oluşturucu içinde modül kaydetmeniz gerekir.