我正在为第三方应用程序构建一个插件,我的插件使用Autofac连接各种组件。容器是在应用程序启动时构建的,但主机应用程序稍后会调用我的命令。
当调用命令时,宿主应用程序提供了一些它定义的类型实例以及我的组件需要使用的实例。我想在容器中注册这些实例,以便它可以处理依赖于这些实例的组件。
我知道我可以使用ContainerBuilder来更新现有容器,但是当命令完成时我想删除这些注册,因为这些实例将不再有效。这可能吗?
也许更好的方法是使用2个容器...该命令可以创建一个新容器来注册这些实例,其他组件可以从应用程序范围的容器中解析。
我如何连接2个容器,以便解析调用冒泡到应用程序范围的容器?
这种方法是否有任何问题需要注意?我想可能存在组件寿命问题......
编辑:现在我做了更多的研究和测试,结果发现我可以使用BeginLifetimeScope(Action< ContainerBuilder>)重载来注册主机应用程序提供的实例仅嵌套生命周期。出于某种原因,我认为在嵌套生命周期中添加注册会导致它们被添加到根容器中,但似乎并非如此。
答案 0 :(得分:3)
正如我在上面的编辑中所指出的,事实证明BeginLifetimeScope(Action< ContainerBuilder>)正是我所需要的。出于某种原因,我认为向嵌套生命周期添加注册会导致它们被添加到根容器中,因此在嵌套生命周期范围结束后可以解析,但似乎并非如此。