2016-07-08 75 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文档的详细信息