2014-07-01 3 views
4

J'utilise MVC avec Autofac. Je souhaite enregistrer une action qui s'exécute une fois par application. Je voudrais atteindre sth. comme ceci:Enregistrer une action avec Autofac par application start

public class SomeModule : IOnceRunnable 
{ 
    private IService service; 

    public SomeModule(IService service) 
    { 
     this.service = service; 
    } 

    public void Action() 
    { 
     // this action would be called once on application start 
    } 
} 

containerBuilder.RegisterOnceRunnable<SomeModule>(); 

Il est possible d'effectuer une telle action?

Je sais que je pourrais utiliser le conteneur construit (var container = builder.Build(); < - résoudre les services manuellement) mais peut-être il y a plus de solution "élégante" comme ci-dessus.

Répondre

2

Ce que vous cherchez est le support Startable Components dans Autofac.

Vous devez implémenter l'interface Autofac.IStartable:

public class SomeModule : Autofac.IStartable 
{ 
    private IService service; 

    public SomeModule(IService service) 
    { 
     this.service = service; 
    } 

    public void Start() 
    { 
     // this action would be called once on application start 
    } 
} 

vous devez également enregistrer votre type comme IStartable:

builder 
    .RegisterType<SomeModule>() 
    .As<IStartable>() 
    .SingleInstance(); 

et Autofac fera le reste la course la méthode Start une fois lorsque la le conteneur est construit.

+0

Merci! C'est exactement ce que je cherchais. –

Questions connexes