2014-06-16 105 views
0

我使用Caliburn.Micro v2Autofac一起,我有與WindowManager.ShowDialog功能的一些問題。實例生命週期管理

我有成功地顯示以下內容的dialog

windowManager.ShowDialog(dialogViewModel.Show(typeToShow)); 

如果通過cross按鈕關閉新所示窗口之後回想上述期待看到的dialog再次,我會遇到以下情況例外:

在窗口關閉後無法設置可見性或調用Show,ShowDialog或WindowInteropHelper.EnsureHandle。

這是我的理解是錯誤是由於ShowDialog只被使用一次,如果我要再次呼籲ShowDialog,我需要提供一個新的實例。我以證明了這在一定程度上:

windowManager.ShowDialog(new DialogViewModel().Show(typeToShow)); 

這成功地將導致每一次新的dialog,但是,我不想叫new這裏各一次。因此,我如何告知Autofac每次給我一個DialogViewModel的新實例,而不是重複使用相同的實例?

編輯1 - DialogViewModel註冊

var buider = new ContainerBuilder(); 
builder.Register(e => new DialogViewModel()) 
     .AsSelf() 
     .InstancePerDependency(); 

我以前一直用.SingleInstance()和使用.InstancePerDependency()想到的可能是什麼,我一直在尋找,但似乎沒有,但。

+0

更多信息如何註冊在容器中的dialogViewModel? – nemesv

+0

@nemesv - 編輯OP以包含VM容器註冊。 – Unflux

回答

1

Autofac已通過Func<T>類內置工廠支持。您只需要解決Func<DialogViewModel>而不是DialogViewModel這意味着返回DialogViewModel的工廠。您無需更改現有註冊。在wiki page.