Xamarin.Forms DependencyService'e Giriş
DependencyService
sınıfı, uygulamaların paylaşılan koddan yerel platform işlevselliği çağırmasını sağlayan Xamarin.Forms bir hizmet bulucudur.
yerel platform işlevselliğini çağırmak için komutunu kullanma DependencyService
işlemi şu şekildedir:
- Paylaşılan kodda yerel platform işlevselliği için bir arabirim oluşturun. Daha fazla bilgi için bkz . Arabirim oluşturma.
- Gerekli platform projelerinde arabirimi uygulayın. Daha fazla bilgi için bkz . Her platformda arabirimi uygulama.
- platform uygulamalarını ile
DependencyService
kaydedin. Bu, çalışma zamanında platform uygulamalarının bulunmasını sağlar Xamarin.Forms . Daha fazla bilgi için bkz . Platform uygulamalarını kaydetme. - Paylaşılan koddan platform uygulamalarını çözümleyin ve bunları çağırın. Daha fazla bilgi için bkz . Platform uygulamalarını çözme.
Aşağıdaki diyagramda bir uygulamada yerel platform işlevselliğinin nasıl çağrıldığı Xamarin.Forms gösterilmektedir:
Arabirim oluşturma
Paylaşılan koddan yerel platform işlevselliğini çağırabilmenin ilk adımı, yerel platform işlevselliğiyle etkileşime geçmek için API'yi tanımlayan bir arabirim oluşturmaktır. Bu arabirim, paylaşılan kod projenize yerleştirilmelidir.
Aşağıdaki örnekte, bir cihazın yönlendirmesini almak için kullanılabilecek bir API arabirimi gösterilmektedir:
public interface IDeviceOrientationService
{
DeviceOrientation GetOrientation();
}
Her platformda arabirimi uygulama
Yerel platform işlevselliğiyle etkileşime yönelik API'yi tanımlayan arabirimi oluşturduktan sonra, arabirimin her platform projesinde uygulanması gerekir.
iOS
Aşağıdaki kod örneği, arabirimin IDeviceOrientationService
iOS'ta uygulanmasını gösterir:
namespace DependencyServiceDemos.iOS
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
UIInterfaceOrientation orientation = UIApplication.SharedApplication.StatusBarOrientation;
bool isPortrait = orientation == UIInterfaceOrientation.Portrait ||
orientation == UIInterfaceOrientation.PortraitUpsideDown;
return isPortrait ? DeviceOrientation.Portrait : DeviceOrientation.Landscape;
}
}
}
Android
Aşağıdaki kod örneği, Android'de arabirimin IDeviceOrientationService
uygulamasını gösterir:
namespace DependencyServiceDemos.Droid
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
IWindowManager windowManager = Android.App.Application.Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
SurfaceOrientation orientation = windowManager.DefaultDisplay.Rotation;
bool isLandscape = orientation == SurfaceOrientation.Rotation90 ||
orientation == SurfaceOrientation.Rotation270;
return isLandscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
}
}
}
Evrensel Windows Platformu
Aşağıdaki kod örneği, arabirimin IDeviceOrientationService
Evrensel Windows Platformu (UWP) üzerindeki uygulamasını gösterir:
namespace DependencyServiceDemos.UWP
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
ApplicationViewOrientation orientation = ApplicationView.GetForCurrentView().Orientation;
return orientation == ApplicationViewOrientation.Landscape ? DeviceOrientation.Landscape : DeviceOrientation.Portrait;
}
}
}
Platform uygulamalarını kaydetme
Arabirim her platform projesinde uygulandıktan sonra, platform uygulamalarının çalışma zamanında bulunabilmesi Xamarin.Forms için ile DependencyService
kaydedilmesi gerekir. Bu genellikle ile DependencyAttribute
gerçekleştirilir ve belirtilen türün arabiriminin bir uygulamasını sağladığını gösterir.
Aşağıdaki örnekte, arabiriminin DependencyAttribute
iOS uygulamasını kaydetmek için komutunun IDeviceOrientationService
kullanılması gösterilmektedir:
using Xamarin.Forms;
[assembly: Dependency(typeof(DependencyServiceDemos.iOS.DeviceOrientationService))]
namespace DependencyServiceDemos.iOS
{
public class DeviceOrientationService : IDeviceOrientationService
{
public DeviceOrientation GetOrientation()
{
...
}
}
}
Bu örnekte, DependencyAttribute
ile kaydeder DeviceOrientationService
DependencyService
. Benzer şekilde, arabiriminin IDeviceOrientationService
diğer platformlardaki uygulamaları ile DependencyAttribute
kaydedilmelidir.
ile platform uygulamalarını DependencyService
kaydetme hakkında daha fazla bilgi için bkz Xamarin.Forms . DependencyService Kaydı ve Çözümü.
Platform uygulamalarını çözme
ile platform uygulamalarının kaydından DependencyService
sonra, uygulamalar çağrılmadan önce çözümlenmelidir. Bu genellikle yöntemi kullanılarak paylaşılan kodda DependencyService.Get<T>
gerçekleştirilir.
Aşağıdaki kod, arabirimi çözümlemek IDeviceOrientationService
için yöntemini çağırma Get<T>
ve ardından yöntemini çağırma örneğini GetOrientation
gösterir:
IDeviceOrientationService service = DependencyService.Get<IDeviceOrientationService>();
DeviceOrientation orientation = service.GetOrientation();
Alternatif olarak, bu kod tek bir satırda değiştirilebilir:
DeviceOrientation orientation = DependencyService.Get<IDeviceOrientationService>().GetOrientation();
ile DependencyService
platform uygulamalarını çözümleme hakkında daha fazla bilgi için bkz Xamarin.Forms . DependencyService Kaydı ve Çözümü.