2016-07-08 10 views
0

Ich möchte Autofac-IoC verwenden, um meinen Service zu initialisieren, der in MVC-Controller-Konstruktor eingefügt wurde. Es sei angenommen, Service-Schnittstelle sieht wie folgt aus:Dienst im Controller-Konstruktor initialisieren

public interface IService 
{ 
    void SetValidationContainer(IReadOnlyDictionary<string, ModelStateEntry> validations); 
} 

Und Controller Ctor:

public class HelloWorldController : Controller 
{ 
    private readonly IService _service; 
    public HelloWorldController(IService service) 
    { 
     _service = service; 
     _service.SetValidationContainer(ModelState); 
    } 
} 

Ist es möglich, Aufruf "SetValidationContainer (Model)" an DI Config zu bewegen? Und so etwas wie folgt verwenden:

container.Register<IService> 
      .As<ServiceImplementaion> 
      .AfterInjectedInto<Controller> 
      .Call(service, controller => service.SetValidationContainer(controller.ModelState)); 

Antwort

2

Autofac bietet 3 Veranstaltungen.

  • OnActivating: vor einer Komponente verwendet wird
  • angehoben
  • OnActivated: einmal hob eine Komponente vollständig
  • OnRelease konstruiert: ausgelöst, wenn eine Komponente

In Ihrem Fall angeordnet ist, könnten Sie die OnActivated, um Ihre Komponente zu initialisieren.

builder.RegisterType<Service>() 
     .As<IService>() 
     .OnActivating(e => e.Instance.Initialize()); 

Werfen Sie einen Blick auf AutofacLifetime Events Dokumentation für weitere Informationen

Verwandte Themen