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

问题描述:

我将autofac添加到现有项目中,并且某些服务实现需要调用它们的Initialize方法并传递配置信息。目前我使用的代码:如何使用autofac执行自定义初始化

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

+1

更好的选择是摆脱初始化Initialize方法。改为使用**构造函数注入**。 – 2010-02-24 05:34:29

+0

我同意,在某个阶段我会解决它,我只是寻找一个快速解决方案,使我的初始更改更容易。 – 2010-02-24 22:44:23

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

应做的伎俩。

您也可以调查可启动模块(请参阅Startable entry in the Autofac wiki)。

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

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

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

+1

可启动模块?我觉得我听到了某个地方的名字...或者类似 – 2010-02-24 20:33:02

+0

感谢Nick,我认为NamedParameter将帮助消除Initialize()方法 – 2010-02-24 23:05:17

+1

@Krzysztof yep,Apache Avalon依靠:) – 2010-02-25 10:10:58