2011-10-13 42 views
5

我正在为第三方应用程序构建插件,我的插件使用Autofac来连接各种组件。容器是在应用程序启动时构建的,但主机应用程序在稍后调用我的命令。组件可以临时注册到Autofac容器中吗?

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

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

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

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

有没有什么值得注意的方法?我想有可能是部件寿命的问题...

编辑:现在我已经做了些研究和测试,它原来我可以只使用BeginLifetimeScope(动作<ContainerBuilder>)超载登记主机应用程序仅提供嵌套生命周期的实例。出于某种原因,我认为向嵌套生命周期添加注册会导致它们被添加到根容器中,但似乎并非如此。

+0

是的,在这种情况下,LifetimeScope正是您想要的。请发布问题的答案并将其标记为已接受,以便稍后找到此问题的人也可以获得答案。 –

+0

谢谢,我早些时候发布了我的答案,但是因为我没有足够的声望点,所以我只好等了8个小时...... –

+0

Yay!我现在可以发布我的答案,但直到明天才能接受...... –

回答

3

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