【问题标题】:Initialize service in controller constructor在控制器构造函数中初始化服务
【发布时间】:2016-07-08 09:35:16
【问题描述】:

我想使用 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));

【问题讨论】:

    标签: asp.net-mvc dependency-injection autofac


    【解决方案1】:

    Autofac 提供 3 个事件。

    • OnActivating :在使用组件之前引发
    • OnActivated :在组件完全构建后引发
    • OnRelease :在组件被释放时引发

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

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

    查看 Autofac Lifetime Events 文档了解更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-05
      • 2016-04-19
      相关资源
      最近更新 更多