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