免责声明:我对 IOC、DI 和 FreshMvvm 非常陌生。刚刚得到这个为自己工作,并想分享以帮助其他人,以防他们像我一样偶然发现这个论坛。
Xamarin Forms 提供的DependencyService 非常棒,但仍然有限(例如,无法实现构造函数注入)。在使用 DependencyService 的同时实现单元测试也可能会变得有点麻烦。 Here 是一个教程,如果您坚持使用 DependencyService 但又想对代码进行单元测试,它将带您完成一些步骤。它是一个服务定位器,比依赖注入更难(在我看来)测试。
我没有使用它,而是使用 FreshMvvm 的 IOC 来访问特定于平台的代码。 @WickedW 所说的一切都是完全正确的。我只是稍微调整了最后一步。
而不是直接解决依赖关系:
IFileHelper fileHelper = FreshMvvm.FreshIOC.Container.Resolve<IFileHelper>();
string dbPath = fileHelper.GetLocalFilePath("CoreSQLite.db3");
我使用了构造函数注入:
Public class MainPageModel : FreshBasePageModel
{
public string YourLabelText { get; set;}
IFileHelper _fileHelper;
public MainPageModel(IFileHelper fileHelper)
{
_fileHelper = fileHelper
}
// This is implemented by FreshBasePageModel
public override void Init(object initData)
{
YourLabelText = _fileHelper.GetLocalFilePath(“CoreSQLite.db3”);
}
}
确保在加载应用程序之前注册您的平台特定类:
FreshMvvm.FreshIOC.Container.Register<IFileHelper, FileHelper>();
global::Xamarin.Forms.Forms.Init();
LoadApplication(new App());
return base.FinishedLaunching(app, options);
我必须这样做,因为我在 App.xaml.cs 的构造函数中解析了 MainPageModel:
public App()
{
InitializeComponent();
var page = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var navContainer = new FreshNavigationContainer(page);
MainPage = navContainer;
}
@WickedW 完全正确地完成了特定于平台的实现,然后我就使用了 Michael Ridland 的 FreshMvvm n=2 视频来弄清楚构造函数注入,因为这是我个人需要的功能。希望这可以帮助像我一样努力解决这个问题的人?。