所以,我在一个xamarin项目中有一个viewmodel类,我在app start上注入一些依赖关系到via ninject绑定。其中一个是IDialogService。
当我的应用程序中的MainPage发生更改时,会引发属性更改事件,并重新绑定对话框服务的实现,因为它与MainPage绑定。
如果我的viewmodel已经用let say DialogServiceA创建,然后当MainPage更改时我们重新绑定到DialogServiceB,我的viewmodel会使用服务A还是B?我认为它使用A,因此不会在UI中显示,因为它与不再存在的MainPage相关联。
因此,如果是这种情况,我怎样才能动态更改对话框服务,然后更新已经实例化的类,而不更改所有内容,以便每次使用时从容器中获取当前对话框服务(因此根本不会注入它)真的,并做更多的服务代理商)
此外,如果这种做法完全错误,请让我直截了当。
答案 0 :(得分:0)
你是对的。重新配置容器不会影响已经实例化的对象。
如果您想在不重新设置从属(父ViewModel)的情况下更改依赖关系,那么您有几种可能性:
但是,在一天结束时,我相信您还需要一种方法来管理何时更改服务/应该是什么。这可能是一种设计替代品,它不依赖于以这种方式交换物体......这将使它更容易(从而更好?)设计。
编辑:我刚看到你也将问题标记为xamarin-forms。在这种情况下,它很可能不会成为使用动态代理或ninject.extensions.factory的选项(它也依赖于动态代理)。为什么?并非所有平台都支持动态代理/ IL发射,AFAIR专门针对Apple设备而无法完成。