autofac - 组件可以临时注册到 Autofac 容器中吗?

标签 autofac

我正在为第 3 方应用程序构建一个插件,我的插件使用 Autofac 来连接各种组件。容器是在应用程序启动时构建的,但主机应用程序稍后会调用我的命令。

调用命令时,主机应用程序会提供一些它定义的类型实例,我的组件将需要使用这些实例。我想在容器中注册这些实例,以便它可以负责连接依赖于这些实例的组件。

我知道我可以使用 ContainerBuilder 来更新现有容器,但我想在命令完成后删除这些注册,因为这些实例将不再有效。这可能吗?

也许更好的方法是使用 2 个容器...该命令可以创建一个新容器来注册这些实例,并且可以从应用程序范围的容器中解析其他组件。

如何连接这 2 个容器,以便解析调用冒泡到应用程序范围的容器?

这种方法有什么需要注意的问题吗?我想可能存在组件生命周期问题......

编辑:现在我做了更多的研究和测试,结果证明我可以使用 BeginLifetimeScope(Action) 重载来注册主机应用程序提供的实例仅嵌套生命周期。出于某种原因,我认为将注册添加到嵌套生命周期会导致它们被添加到根容器,但情况似乎并非如此。

最佳答案

正如我在上面的编辑中所指出的,事实证明 BeginLifetimeScope(Action) 正是我所需要的。出于某种原因,我认为将注册添加到嵌套生命周期会导致它们被添加到根容器,因此在嵌套生命周期范围结束后可以解析,但情况似乎并非如此。

关于autofac - 组件可以临时注册到 Autofac 容器中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7748394/

相关文章:

c# - 在 web api 2 的集成测试中使用 Autofac

c# - 尝试创建类型的 Controller 时出错。确保 Controller 有一个无参数的公共(public)构造函数

architecture - 在解析公共(public)类时注入(inject)内部帮助类

c# - 注册通用工厂

c# - 没有通用接口(interface)和扫描组件的注册适配器

c# - 使用 Autofac KeyFilterAttibute 将服务注入(inject) Action Filter

entity-framework - 使用 AutoFac 解析具有扩展方法的类

dependency-injection - 带有 Autofac 和 webjob 的 IServiceProvider

c# - 清楚地说明自动注册的程序集

c# - 无法将 Autofac 添加到 .Net Core 中的 ServiceCollection