2015-05-03 35 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