在与同事讨论 Autofac 时,出现了依赖项的运行时注册问题。例如,在 Prism 中,程序集经常在运行时加载,并且它们的依赖项在 IoC 容器(通常是 Unity)中注册。
Autofac 如何实现这一点?
从 Autofac 的文档和我在网上找到的内容来看,注册似乎是在应用程序启动时执行的。即使使用“外部”程序集,注册也位于应用程序启动时程序集所在的模块中。在应用程序启动时“构建”容器后,我们如何执行此操作?
(请注意,程序集可能想要添加依赖项以供应用程序中其他组件的使用,因此嵌套容器可能无法解决此处的问题。与此主题相关:Unity 有 RegisterIfExists 等方法。是否有 Autofac等价物?)
Thanks!
更新现有 Autofac 容器:您可以更新现有的 AutofacContainer
在运行时通过使用ContainerBuilder.Update()
。以下代码示例取自博客文章Autofac 2.2 发布 http://nblumhardt.com/2010/05/autofac-2-2-released/,演示用法:
var container = // something already built
var updater = new ContainerBuilder();
updater.RegisterType<A>();
updater.Register(c => new B()).As<IB>();
// Add the registrations to the container
updater.Update(container);
Autofac 和 Prism 集成: 问题Autofac 中 Prism 集成的状态如何? https://stackoverflow.com/questions/5709498/whats-the-status-of-prism-integration-in-autofac可能对你也有用。
2021 年 7 月更新- Autofac 删除了 Update 方法(不是最近,但我刚刚注意到)。请参阅 github 上的此问题,了解无需更新即可完成所需操作的“更好”方法。https://github.com/autofac/Autofac/issues/811 https://github.com/autofac/Autofac/issues/811
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)