【发布时间】:2017-08-23 09:16:23
【问题描述】:
我在 Xamarin 项目中使用 mvvm light SimpleIoC 并使用实例键来获取一些视图模型。
SimpleIoc.Default.GetInstance<ContextViewModel>("contextIdentifier");
有没有办法像其他依赖项一样在实例本身中获取此实例键,在构造函数中?
我知道我可以在 ContextViewModel 上创建和设置自定义属性,但由于我的班级需要这个值才能工作,我不喜欢我可以获得此视图模型的“非操作实例”的想法.
编辑更多信息,解释为什么我希望我的 ViewModel 实例知道它的标识符:
这是一个 Xamarin.iOS 应用程序(ViewController 由故事板创建)。
在我的应用程序中,我有同一个视图控制器的多个实例(并且在同一个 UITabBarController 中),因此,我需要为每个视图控制器实例使用不同的 ViewModel 实例。
由于我的 ViewModel 需要一个 id 来从数据库中获取一些数据,我想我也会使用这个标识符作为实例标识符。
我可以通过在我的视图控制器的 ViewDidLoad() 方法中获取我的 ViewModel 实例并在其上调用一些 Setter 来使其工作,但我不喜欢这样(也许我错了 :))因为在我的请注意,IoC 应该只返回操作实例(无需调用多个 setter)。
最好的问候。
【问题讨论】:
-
我不明白你在做什么。为什么实例应该知道(并关心)它的实例密钥?
-
好吧,也许我做错了,但在我的应用程序中,我有同一个视图控制器的多个实例,因此,我需要为每个视图控制器实例使用不同的 ViewModel 实例。由于我的 ViewModel 需要一个 id 来从数据库中获取一些数据,我想我也会使用这个标识符作为实例标识符。
-
啊,棘手...你能说明它们之间的关系吗?您的 ViewController 类是否有 ViewModel 字段?你如何创建你的 ViewController?我可以想象,如果您通过 ctor 参数将 viewmodel 注入到 viewcontroller 中,您可以在 viewmodel 上的该 ctor 中设置一个字段,因此当控制器开始运行时它将被完全初始化......你能关注我吗?
-
我知道,但我忘了确切地说这是一个 Xamarin.Ios 应用程序,因此视图控制器由情节提要实例化。我相应地更新了我的问题。谢谢
标签: c# xamarin xamarin.ios mvvm-light simpleioc