SimpleIoc不使用密钥注册VM

时间:2012-05-15 18:56:55

标签: c# mvvm-light silverlight-5.0

Toolkit二进制版本:4.0.30319

使用SimpleIoc和SL5二进制文件注册一个带有密钥的viewmodel是不成功的。我唯一一次工作就是在SL4项目中使用Mix 11 navigation sample中的SL4二进制文件。

以下是使用SimpleIoc注册我的VM的代码:

if (!SimpleIoc.Default.Contains<DeviceListDetailViewModel>(commandParam))
{
     SimpleIoc.Default.Register(
         () => new DeviceListDetailViewModel(this.Repository, this.NavService) { NavParameter = commandParam }, commandParam);
}

这是我在视图中检查实例并获取“Item not Found”的地方:

if (DataContext == null)
{
     var url = e.Uri.ToString();
     NavParam = url.Substring(url.IndexOf("?") + 1);

     if (!SimpleIoc.Default.Contains<DeviceListDetailViewModel>(NavParam))
     {
           MessageBox.Show("Item not found");
           return;
     }

     var vm = SimpleIoc.Default.GetInstance<DeviceListDetailViewModel>(NavParam);
     DataContext = vm;
 }

我做错了什么?

1 个答案:

答案 0 :(得分:0)

注册视图模型不会创建实例,除非您为createInstanceImmediate传入true。因此,在您调用Contains时,没有创建任何实例。

您可以在documentation

中看到