使用Autofac进行运行时注册

时间:2011-05-30 07:45:45

标签: runtime prism autofac

在与同事讨论Autofac时,出现了依赖关系的运行时注册问题。例如,在Prism中,程序集经常在运行时加载,并且它们的依赖项在IoC容器(通常是Unity)中注册。

如何使用Autofac实现这一目标?

从Autofac的文档和我在网上找到的内容,似乎注册是在应用程序启动时执行的。即使使用“外部”组件,注册也位于模块中,组件位于app start。在应用程序启动后“构建”容器后,我们如何执行此操作?

(请注意,程序集可能希望为应用程序中的其他组件的使用添加依赖项,因此嵌套容器可能无法解决此问题。与此主题相关:Unity具有诸如RegisterIfExists之类的方法。是否有Autofac等效物?)

谢谢!

2 个答案:

答案 0 :(得分:31)

更新现有的Autofac容器:您可以使用Container在运行时更新现有的Autofac ContainerBuilder.Update()。以下代码示例摘自博客帖子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集成:问题Whats the status of Prism integration in Autofac?也可能对您有用。

答案 1 :(得分:1)

Autofac 4.8.1.0更新

ContainerBuilder.Update方法被标记为Obsolete并带有注释:
通常应将容器视为不可变的。在构建/解决之前,注册所有依赖项。如果需要更改容器的内容,则从技术上讲,应重建容器。将来的主要版本中可能会删除此方法。