2011-10-13 39 views
5

我正在爲第三方應用程序構建插件,我的插件使用Autofac來連接各種組件。容器是在應用程序啓動時構建的,但主機應用程序在稍後調用我的命令。組件可以臨時註冊到Autofac容器中嗎?

當一個命令被調用時,主機應用程序提供了它定義的類型的幾個實例,並且我的組件需要使用。我想在容器中註冊這些實例,以便它可以負責連接依賴於這些實例的組件。

我知道我可以使用ContainerBuilder來更新現有的容器,但是我想在命令完成時刪除這些註冊,因爲這些實例將不再有效。這可能嗎?

也許更好的方法是使用2個容器...該命令可以創建一個新容器來註冊這些實例,並且其他組件可以從應用程序作用域容器中解析。

我該如何連接2個容器,以便解析調用會冒泡到應用程序範圍的容器?

有沒有什麼值得注意的方法?我想有可能是部件壽命的問題...

編輯:現在我已經做了些研究和測試,它原來我可以只使用BeginLifetimeScope(動作<ContainerBuilder>)超載登記主機應用程序僅提供嵌套生命週期的實例。出於某種原因,我認爲向嵌套生命週期添加註冊會導致它們被添加到根容器中,但似乎並非如此。

+0

是的,在這種情況下,LifetimeScope正是您想要的。請發佈問題的答案並將其標記爲已接受,以便稍後找到此問題的人也可以獲得答案。 –

+0

謝謝,我早些時候發佈了我的答案,但是因爲我沒有足夠的聲望點,所以我只好等了8個小時...... –

+0

Yay!我現在可以發佈我的答案,但直到明天才能接受...... –

回答

3

正如我在上面的編輯中指出的,事實證明,BeginLifetimeScope(動作<ContainerBuilder>)正是我所需要的。出於某種原因,我認爲向嵌套生命週期添加註冊會導致它們被添加到根容器,因此在嵌套生命週期結束後可以解析,但似乎並非如此。