DependencyService是一項非常有限的服務,專爲特定目的而設計。您可以創建一個實現該服務的Facade類,並使用基於運行時邏輯的2個實現之一(如果這是您的目標)。用DependencyService而不是其他兩個註冊外觀。把正在使用的邏輯放在門面內。
對於更多功能,我建議您查看XLabs.Ioc抽象層,並從那裏選擇衆多IOC提供者之一。我是它的作者,但即使你不使用抽象層,你也會從那裏找到跨平臺兼容的DI容器,可以更好地滿足你的需求。
https://www.nuget.org/packages?q=xlabs.ioc
欲瞭解更多信息,我建議就如何使用它考慮看看馬特的文章:使用DependencyService http://www.codenutz.com/autofac-ninject-tinyioc-unity-with-xamarin-forms-labs-xlabs/
快速樣品和門面如下。
[assembly: Dependency(typeof(ScannerFacade))]
namespace DiSample.Droid
{
public class ScannerFacade : IScanner
{
private readonly IScanner primaryScanner;
private readonly IScanner secondaryScanner;
/// <summary>
/// Default constructor so <see cref="DependencyService"/> can resolve.
/// </summary>
public ScannerFacade() : this(new Scanner1(), new Scanner2())
{
}
public ScannerFacade(IScanner primaryScanner, IScanner secondaryScanner)
{
this.primaryScanner = primaryScanner;
this.secondaryScanner = secondaryScanner;
}
public bool IsAvailable
{
get { return this.primaryScanner.IsAvailable || this.secondaryScanner.IsAvailable; }
}
public Task DoSomething()
{
if (this.primaryScanner.IsAvailable) return this.primaryScanner.DoSomething();
if (this.secondaryScanner.IsAvailable) return this.secondaryScanner.DoSomething();
throw new System.InvalidOperationException("No scanners are available.");
}
}
}
所以IScanner接口I用於例如:
public interface IScanner
{
bool IsAvailable { get; }
Task DoSomething();
}
非常感謝SKall。 我面臨的問題是: 我有一個DependencyService調用IBarcodeScanner。 在我的android項目中,我有兩種類型或條碼掃描器實現IBarcodeScanner。 在運行時,我想檢查哪個連接到設備並將相應的實現傳遞給依賴項服務。 – jonamreddy
然後,您想要實現一個服務門面並使用依賴項服務進行註冊。不要註冊實際的實現,而是在外觀中使用它們。 – SKall
謝謝你SKall。我知道我問得太多了。但是,您能否提供這種方法的示例代碼? – jonamreddy