Отказ от ответственности: я новичок в IOC, DI и FreshMvvm. Просто заставил это работать для себя и хотел поделиться, чтобы помочь другим, на случай, если они наткнутся на этот форум, как я.
DependencyService, предоставляемый Xamarin. Forms - это фантастика, но все же ограниченная (например, не может реализовать внедрение конструктора). Также может возникнуть проблема с внедрением модульного тестирования при использовании DependencyService. Вот руководство, которое проведет вас через некоторые шаги, если вы настаивают на использовании DependencyService, но также хотят провести модульное тестирование вашего кода. Это локатор служб, который (на мой взгляд) сложнее протестировать, чем внедрение зависимостей.
Вместо этого я просто использовал IOC FreshMvvm для доступа к коду конкретной платформы. Все, что сказал @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);
Мне пришлось это сделать, потому что я разрешаю свой MainPageModel в конструкторе своего App.xaml.cs:
public App()
{
InitializeComponent();
var page = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var navContainer = new FreshNavigationContainer(page);
MainPage = navContainer;
}
@WickedW полностью соответствовал конкретной платформе реализации, тогда я просто использовал FreshMvvm n = 2 видео, чтобы выяснить, как внедрить конструктор, потому что это была функция, которая мне была нужна лично. Надеюсь, это поможет людям, которые изо всех сил пытались понять это, как я ????.
person
MedievalCoder
schedule
19.03.2019