2016-07-08 77 views
0

我想使用autofac IoC來初始化注入到MVC控制器構造函數中的服務。假設服務接口如下:在控制器構造函數中初始化服務

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

和控制器的構造函數:

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

是否可以移動調用 「SetValidationContainer(ModelState中)」,以DI配置?而使用這樣的事情:

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

回答

2

Autofac提供了3個事件。

  • OnActivating:組件之前提出的用於
  • OnActivated:暫時上升組件被完全構造
  • OnRelease:當一個部件佈置

在你的情況下提出的,可以使用OnActivated初始化您的組件。

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

看一看AutofacLifetime Events文檔的詳細信息