使用 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
忽略结果,这样单例将被实例化并存储在容器单例范围内。
下面是 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
忽略结果,这样单例将被实例化并存储在容器单例范围内。