在控制器构造函数中初始化服务

Initialize service in controller constructor

我想使用 autofac IoC 来初始化注入到 MVC 控制器构造函数中的服务。假设服务界面如下所示:

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

和控制器ctor:

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

Autofac 提供 3 个事件。

  • OnActivating : 在使用组件之前引发
  • OnActivated : 一旦组件完全构建就引发
  • OnRelease : 当一个组件被释放时引发

对于您的情况,您可以使用 OnActivated 来初始化您的组件。

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

查看 Autofac Lifetime Events 文档以获取更多信息