如何使用autofac进行自定义初始化

问题描述 投票:4回答:1

我正在向现有项目添加autofac,并且一些服务实现需要调用其Initialize方法并传递配置信息。目前我正在使用代码:

builder.Register(context =>
                 {
                    var service = 
                         new SqlTaxRateProvider(context.Resolve<IUserProvider>());
                    service.Initialize(config);
                    return service;
                 }
).As<ITaxService>()
.SingleInstance();

哪个有效,但我仍在创建自己的对象,这正是我试图摆脱这个并允许autofac为我处理它。是否可以配置执行自定义初始化的后期创建操作?

为了让你了解我理想的事情,这将是代码:

builder.RegisterType<SqlTaxRateProvider>()
 .As<ITaxService>()
 .OnCreated(service=> service.Initialize(config))
 .SingleInstance();

更新:我使用的是Autofac-2.1.10.754-NET35

inversion-of-control autofac
1个回答
7
投票
.OnActivating(e => e.Instance.Initialize(...))

应该做的伎俩。

您还可以研究Startable模块(请参阅Startable entry in the Autofac wiki)。

Mark建议在构造函数中进行初始化也是一个很好的建议。在那种情况下使用

.WithParameter(new NamedParameter("config", config))

将config参数与其他构造函数依赖项合并。

© www.soinside.com 2019 - 2024. All rights reserved.