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

发布于 2024-08-22 14:41:06 字数 740 浏览 9 评论 0原文

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

I'm adding autofac to an existing project and some of the service implementations require their Initialize method to be called and passed configuration information. Currently I'm using the code:

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

which works but I'm still creating the object myself which is what I'm trying to get away from this and allow autofac to handle it for me. Is it possible to configure a post create operation that would carry out the custom initialisation?

To give you an idea of what I'm after ideally this would be the code:

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

Update:
I am using Autofac-2.1.10.754-NET35

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

青春如此纠结 2024-08-29 14:41:06
.OnActivating(e => e.Instance.Initialize(...))

应该可以解决问题。

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

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

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

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

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

should do the trick.

You might also investigate the Startable module (see the Startable entry in the Autofac wiki).

Mark's suggestion to do initialisation in the constructor is also a good one. In that case use

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

to merge the config parameter in with the other constructor dependencies.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文