不能在具有 DependencyService 的平台特定项目中使用多个委托?

Can't use more than one delegate in platform specific project with DependencyService?

我在 Xamarin.Forms 中有一个 IService,看起来像这样:

namespace MyProject.Main
{
    public delegate void XChanged();
    public delegate void YChanged();
    public delegate void ZChanged();
    public interface IOrientationSensor
    {
        double X { get; set; }
        double Y { get; set; }
        double Z { get; set; }

        event XChanged OnXChanged;
        event YChanged OnYChanged;
        event ZChanged OnZChanged;
        void Start();
        void Stop();
    }
}

我首先尝试将我的委托放入接口中 - 但 Visual Studio 抱怨它 - 所以我读到它们可以放入命名空间中。

现在在我的 Service、iOS 实现中我可以触发 OnChangedX:

[assembly: Dependency(typeof(OrientationSensor)) ]
namespace MyProject.iOS
{
    public class OrientationSensor : IOrientationSensor
    {
        CMMotionManager motionManager = new CMMotionManager();
        NSOperationQueue queue = new NSOperationQueue();

        public double X { get; set; }
        public double Y { get; set; }
        public double Z { get; set; }

        public event XChanged OnXChanged;
        public event YChanged OnYChanged;
        public event ZChanged OnZChanged;

        public void Start()
        {
            motionManager.StartDeviceMotionUpdates(queue, DataUpdated);
        }
        public void Stop()
        {
            motionManager.StopDeviceMotionUpdates();
        }
        void DataUpdated(CMDeviceMotion data, NSError error)
        {
            if (data == null)
                return;
            // OnChangedX() works
            // OnChangedY() crashes
            // OnChangedZ() crashes
        }
    }
}

触发 Y 和 Z 崩溃并显示消息:

Object reference not set to an instance of an object

... 发射 X 时有效。

有人可以帮忙解释一下为什么我似乎只能使用 1 个代表吗?

我刚刚意识到我已将事件处理程序分配给 OnXChanged,但没有分配给 OnYChangedOnZChanged。分配事件处理程序显然会给出事件值:

public static void UseSensors()
{
    var orientationSensor = DependencyService.Get<IOrientationSensor>();
    orientationSensor.OnXChanged += () =>
    {

    };
    /* did not realize these where needed for OnChangedY and OnChangedZ to stop being null
    orientationSensor.OnYChanged += () =>
    {

    };
    orientationSensor.OnZChanged += () =>
    {

    };
    */
    orientationSensor.Start();
}