2012-07-26 13 views
5

Jak mogę zarejestrować globalne oddzwanianie w kontenerze Autofac, które jest wyzwalane, gdy jakiś obiekt zostanie rozwiązany?Autofac - globalne oddzwanianie po rozwiązaniu obiektu

Chcę użyć odbicia i sprawdzić, czy obiekt ma metodę o nazwie Initialize() i zadzwoń, jeśli to robi. Chcę, żeby była pisana kaczkami, tzn. Nie są wymagane żadne interfejsy.

Dzięki!

Odpowiedz

12

W Autofac można użyć interfejsu IComponentRegistration zapisać się na różnych zdarzeń życiowych:

  • OnActivating
  • OnActivated
  • onRelease

Można uzyskać instancję IComponentRegistration tworząc Module i przesuń metodę AttachToComponentRegistration:

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); 
    } 
} 

Teraz trzeba tylko zarejestrować swój moduł w swoim budowniczym pojemnika:

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

i metoda OnActivated zostanie wywołana po każdej aktywacji składnika nie mater w którym moduł został zarejestrowany komponent.

Powiązane problemy