6

我正在将 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

4

1 回答 1

10
.OnActivating(e => e.Instance.Initialize(...))

应该做的伎俩。

您还可以研究 Startable 模块(请参阅Autofac wiki 中的 Startable 条目)。

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

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

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

于 2010-02-24T20:30:44.543 回答