我将 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
.OnActivating(e => e.Instance.Initialize(...))
应该可以解决问题。
您还可以研究 Startable 模块(请参阅Autofac wiki 中的可启动条目 http://autofac.readthedocs.org/en/latest/lifetime/startup.html).
马克关于在构造函数中进行初始化的建议也是一个很好的建议。在这种情况下使用
.WithParameter(new NamedParameter("config", config))
将配置参数与其他构造函数依赖项合并。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)