要使用已创建的.NET标准库BooksLib和Framework,可以在Xamrin.Forms解决方案中添加已有项目。这些项目需要从每个Xamarin项目中引用。
还需要添加NuGet包Microsoft.Extensions.DependencyInjection和Microsoft.Extensions.Configuration。ILogger接口由服务和视图模型使用。
Xamarin还包括一个依赖注入容器,它可以从DependencyService类中访问。DependencyService.Register注册一个服务,而DependencyService.Get从容器中返回服务。但是,因为前面章节都在使用.NET Core DI 容器 Microsoft.Extensions.DependencyInjection,它也与BooksAppX一起使用。
可以实例化依赖注入容器,并可以在共享的App类中注册服务。对于具有特定于UWP实现的服务,现在需要完成特定于Xamarin的实现。需要Xamarin实现、特定于平台的服务是显示消息对话框的IMessageService,和在页面之间导航的INavigationService:
public App()
{
InitializeComponent();
MainPage = new MainPage();
}
private void RegisterServices()
{
var service = new ServiceCollection();
service.AddSingleton<IBooksRepository, BooksSampleRepository>();
service.AddSingleton<IItemsService<Book>,BooksService>();
service.AddTransient<BooksViewModel>();
service.AddTransient<BookDetailViewModel>();
//service.AddSingleton<IMessageService, XamarinMessageService>();
service.AddSingleton<>(INavigationService, XamarinNavigationService);
service.AddSingleton<XamarinInitializeNavigationService>();
service.AddLogging();
AppServices = service.BuildServiceProvider();
}
public IServiceProvider AppServices { get; private set; }
IMessageService和INavigationService的实现将在"导航"一节中讨论。