2015-05-03 34 views
1

我正在看https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/Samples/XLabs.Sample/ViewModel/CameraViewModel.cs尝试让相机可用于我的应用程序。Xamarin XLabs IOC和相机

我有这样的设置是相同的,但是当我运行我的应用程序的iOS应用程序调用我的PCL是给错误:

IResolver has not been set. Please set it by calling Resolver.SetResolver(resolver) method. 

我不知道这意味着什么或什么确切的代码,我需要。我根本不使用IOC,我也不太在乎,但我只想让这台相机适用于我的PCL。当我不在这里使用MVC时,如何将此相机提供给我的PCL。

回答

2

如果您想使用的视图模型,然后修改构造函数采取IMediaPicker:

https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/Samples/XLabs.Sample/ViewModel/CameraViewModel.cs#L62

public CameraViewModel(IMediaPicker mediaPicker) 
    { 
     this._mediaPicker = mediaPicker; 
    } 

取出安装功能:

https://github.com/XLabs/Xamarin-Forms-Labs/blob/master/Samples/XLabs.Sample/ViewModel/CameraViewModel.cs#L156-L167

你怎么获得IMediaPicker实现到PCL取决于你。 IoC是首选(也是简单)的方式,但您也可以使用其他模式。一种方法是在ViewModel上定义静态Func<IMediaPicker>属性,并将其设置在特定于平台的项目中。

IoC容器是为了把它做的最简单,最快捷的方式,它会那样简单的应用程序启动时添加这些线(例如AppDelegate中的FinishedLaunching法):

var container = new SimpleContainer(); 
container.Register<IMediaPicker, MediaPicker>(); 
Resolver.SetResolver(container.GetResolver()); 
+0

这就是我要问的问题。我不知道如何使用XLabs获得IMediaPicker实现。我不挑剔我如何得到它我只需要知道如何得到它,因为我不知道该怎么做。 – user441521

+0

因此,XLabs示例使用DependencyService。当您阅读DependencyService时,它会在每个特定平台的顶部说明添加程序集属性以便自动注册。 http://developer.xamarin.com/guides/cross-platform/xamarin-forms/dependency-service/ 这似乎不是与XLabs的情况,虽然当你看他们的实施他们没有做那。所以我不知道如何手动注册MediaPicker for IoC – user441521

+0

我更新了我的答案,以获取有关如何使用IMediaPicker设置Resolver的示例。如果您使用的是Xamarin Forms,那么您可以使用DependencyService进行注册和解析,但这需要对ViewModel本身进行更改。 – SKall