相当于使用SimpleIoc容器的Xamarin MVVMLight到Xamarin Prism DryIoc

时间:2018-02-03 18:48:36

标签: c# xamarin.forms prism dryioc

以下是使用SimpleIoc容器的Xamarin MVVMLight的代码,现在我使用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

1 个答案:

答案 0 :(得分:1)

对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中没有这样的参数。您可以在注册后立即解析服务,但我认为只有服务是DoubleI(DryIoc中的Reuse.Singleton参数)才有意义。

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