Runtime 使用Autofac进行运行时注册

Runtime 使用Autofac进行运行时注册,runtime,prism,autofac,Runtime,Prism,Autofac,在与同事讨论Autofac时,出现了依赖项的运行时注册问题。例如,在Prism中,程序集经常在运行时加载,并且它们的依赖关系在IoC容器中注册(通常是Unity) 如何使用Autofac实现这一点 从Autofac的文档和我在web上的发现来看,注册似乎是在应用程序启动时执行的。即使使用了“外部”程序集,注册也位于应用程序启动时程序集所在的模块中。在应用程序启动时“构建”容器之后,我们如何做到这一点 (请注意,程序集可能希望为应用程序中其他组件的使用添加依赖项,因此嵌套容器可能无法解决此问题。与

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

如何使用Autofac实现这一点

从Autofac的文档和我在web上的发现来看,注册似乎是在应用程序启动时执行的。即使使用了“外部”程序集,注册也位于应用程序启动时程序集所在的模块中。在应用程序启动时“构建”容器之后,我们如何做到这一点

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


谢谢

更新现有Autofac容器:您可以在运行时使用
ContainerBuilder.Update()
更新现有Autofac
容器。以下代码示例取自博客文章,演示了该用法:

var container=//已经构建了一些东西
var updater=newcontainerbuilder();

updater.RegisterType也可能对您有用。

Autofac 4.8.1.0的更新

ContainerBuilder.Update
方法被标记为
已过时
,并带有注释:

容器通常应该被认为是不可变的。在生成/解析之前注册所有依赖项。如果需要更改容器的内容,技术上应该重建容器。此方法可能会在未来的主要版本中删除。

可能的重复项您知道是否可以使用动态加载的程序集中的类型来执行此操作吗?也就是说,我使用
Assembly.LoadFrom()
,然后用新发现的类型更新容器?其中一个
RegisterType
重载使用一个
Type
实例,因此如果您有该实例,您应该可以使用它。
update()
命令只可以使用一次。这对于运行时注册是无效的。如果可能,我需要在
.Build()
操作后注册新类型。。。