gpt4 book ai didi

inversion-of-control - MVVMCross 中特定于平台的 IoC

转载 作者:行者123 更新时间:2023-12-04 23:05:06 25 4
gpt4 key购买 nike

我正在试一试 MVVMCross,看看它是否会在一些更大的项目中使用,这很棒。我喜欢导航、viewModel 位置和通用的跨平台方法,这正是我所需要的。但是,我有点坚持根据平台拆分一些依赖注入(inject)。

所以,我们有一个基本的应用程序,带有一个共享的可移植库,它在启动时初始化服务引用:

    public TwitterSearchApp()
{
InitaliseServices();
}

private void InitaliseServices()
{
this.RegisterServiceInstance<ITwitterSearchProvider>(new TwitterSearchProvider());
}

美好的。这定义了将在所有平台上使用的服务实现。但是,如果我需要在不同平台上实现不同的实现——例如存储/缓存,核心要求相同,但在手机上的处理方式与在平板电脑上的处理方式不同。

我认为它可能会在某个地方进入安装程序:

public class Setup : MvxBaseWinRTSetup
{
public Setup(Frame rootFrame): base(rootFrame)
{
}

protected override MvxApplication CreateApp()
{
var app = new TwitterSearchApp();//set platorm specific IoC here maybe?
return app;
}

protected override void AddPluginsLoaders(Cirrious.MvvmCross.Platform.MvxLoaderPluginRegistry loaders)
{ // or perhaps here?
loaders.AddConventionalPlugin<Cirrious.MvvmCross.Plugins.Visibility.WinRT.Plugin>();
base.AddPluginsLoaders(loaders);
}
}

但我不确定。我已经看到了替换 ViewModel 定位器的引用,但是是否有类似的方法来替换其他 IoC 服务?

谢谢,总体而言,在框架上做得很好,我真的很喜欢它的工作方式(除了这一点,我还不太理解)

托比

最佳答案

有三个基本选项:

1 .在您的 UI 项目中添加特定于平台的服务,然后在设置期间将它们注册到覆盖中 - 您使用的覆盖取决于何时需要您的服务,但在大多数情况下,您可以使用 InitializeLastChance在初始化结束时调用的覆盖:

protected override void InitializeLastChance()
{
this.RegisterServiceInstance<IMyService>(new SingletonMyService());
this.RegisterServiceType<IMyService2, PerCallService2>();
base.InitialiseLastChance();
}

如果“最后机会”对您的服务来说太晚了——如果您在核心应用程序启动期间需要该服务——那么您可以覆盖 InitializeIoC 之后的任何初始化步骤- 例如 InitializeFirstChance .有关初始化步骤的列表和顺序,请参阅 InitializePrimaryInitializeSecondaryMvxBaseSetup.cs

2 .在 UI 代码的其他一些位中添加特定于平台的注册 - 例如在特定 View 的构造函数中(这个选项用得不多……但如果你想的话,你可以在一些奇怪的情况下使用它……)

3 .使用插件 - 所有插件都是 IoC 的包装器。插件的缺点是它们增加了一些开发开销(您必须添加单独的项目和插件样板文件),但它们的优点是它们可以跨应用程序重用,并且更容易为它们编写测试应用程序和测试工具。有关插件的更多信息,请参阅 Making mono cross platform support for Task/Intenthttp://slodge.blogspot.co.uk/2012/10/build-new-plugin-for-mvvmcrosss.html

我的一般建议 - 如果您想在以后的项目中重用代码,请从第一个选项开始并迁移到插件...

关于inversion-of-control - MVVMCross 中特定于平台的 IoC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14337063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com