使用 SimpleIoc 容器的 Xamarin MVVMLight 等效于 Xamarin Prism DryIoc

Equivalent of this Xamarin MVVMLight using SimpleIoc container to Xamarin Prism DryIoc

下面是 Xamarin MVVMLight 使用 SimpleIoc 容器的代码,现在我正在使用 DryIoccontainer 将它移植到 Xamarin Prism :

this.container.Register<IAsciiCommander>(() =>  {
      var commander = new AsciiCommander();
      commander.AddSynchronousResponder();
      commander.AddResponder(
          this.container.GetInstance<TranspondersMonitor>());
      commander.AddResponder(
          this.container.GetInstance<BarcodeMonitor>()); 
      return commander;
  });

以下是 ViewModelLocator 中的一些,我需要在 App.xaml.cs

中执行此操作
 this.container.Register<InventoryConfiguration>(true);
 this.container.Register<IInventoryConfigurator>(
     () => new InventoryConfigurator(
              this.container.GetInstance<IAsciiCommander>(),
              this.container.GetInstance<InventoryConfiguration>())
 );// This is done in ViewModelLocator

不确定 Prism,但 DryIoc 中受尊重的注册是:

this.container.RegisterDelegate<IAsciiCommander>(r => { 
    var commander = new AsciiCommander();
    commander.AddSynchronousResponder();
    commander.AddResponder(r.Resolve<TranspondersMonitor>());
    commander.AddResponder(r.Resolve<BarcodeMonitor>());
    return commander; });

第二个片段:

this.container.Register<InventoryConfiguration>();
this.container.RegisterDelegate<IInventoryConfigurator>(r => 
    new InventoryConfigurator(
        r.Resolve<IAsciiCommander>(), 
        r.Resolve<InventoryConfiguration>())
 );// This is done in ViewModelLocator

关于true 参数,DryIoc 中没有这样的参数。您可以在注册后立即解析该服务,但我认为只有当服务是单例时才有意义(Reuse.Singleton DryIoc 中的参数)。

我的意思是立即解析只是调用一个 Resolve 忽略结果,这样单例将被实例化并存储在容器单例范围内。