在控制器构造函数中初始化服务
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 文档以获取更多信息
我想使用 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 文档以获取更多信息