我一直在使用Unity很長一段時間,但我一直使用它與構造函數注入。爲了減少我必須注入到視圖模型中的類的數量(因爲我的命令依賴於它們),我想我會嘗試創建一個使用屬性注入的概念,從而消除對大型構造函數參數列表的需求。這是場景...Unity的屬性注入導致堆棧溢出
我正在創建一個視圖模型,它具有位於以某種方式使用/更新軟管視圖模型的屬性上的命令。我希望將View Model的實例傳遞給位於View Models屬性中的Commands的構造函數。例如。
public MainViewModel
{
public MainViewModel()
{
Customers = new ObservableCollection<CustomerViewModel>();
}
[Depedency("LoadCommand")]
public ICommand LoadCustomersCommand { get; set; }
public ObservableCollection<CustomerViewModel> Customers { get; private set; }
}
public LoadCustomersCommand : ICommand
{
public LoadCustomersCommand(MainViewModel mainViewModel)
{
//Store view model for later use
}
//... implementation
}
//Setup code in App.Xaml
IUnityContainer unityContainer = new UnityContainer();
unityContainer.RegisterType<ICommand, LoadCommand>("LoadCommand");
unityContainer.RegisterType<MainViewModel>(new ContainerControlledLifetimeManager());
當我解決MainViewModel類時,我得到一個StackOverflow異常(如果Visual Studio回來的話)。現在我期望Unity首先創建一個MainViewModel的實例,然後它基本上是一個單例,然後查看View Model的實例並創建傳遞給新創建的MainViewModel的Command,但顯然我錯了。
任何想法?
感謝您的回答和你的鏈接。我認爲可能是這種情況,但由於屬性注入,我認爲在實例化屬性類時,MainViewModel應該在容器中,「循環」引用不會成爲問題 - 但顯然不是問題。感謝您的清理! – Adam 2010-06-07 10:46:03