如何使用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
.OnActivating(e => e.Instance.Initialize(...))
应做的伎俩。
您也可以调查可启动模块(请参阅Startable entry in the Autofac wiki)。
马克建议在构造函数中进行初始化也是一个好建议。在这种情况下,使用
.WithParameter(new NamedParameter("config", config))
将config参数与其他构造函数依赖项合并。
可启动模块?我觉得我听到了某个地方的名字...或者类似 – 2010-02-24 20:33:02
感谢Nick,我认为NamedParameter将帮助消除Initialize()方法 – 2010-02-24 23:05:17
@Krzysztof yep,Apache Avalon依靠:) – 2010-02-25 10:10:58
更好的选择是摆脱初始化Initialize方法。改为使用**构造函数注入**。 – 2010-02-24 05:34:29
我同意,在某个阶段我会解决它,我只是寻找一个快速解决方案,使我的初始更改更容易。 – 2010-02-24 22:44:23