繁体   English   中英

Xamarin.Forms,无法从特定于平台的项目中上课

[英]Xamarin.Forms, cannot reach class from platform specific projects

最初,我有一个多平台项目,在其中创建了一个用于传输数据的类,而我的问题是,例如,如果单击按钮,则应调用该类中的方法,但无法访问该方法。

这是我的项目结构: 在此处输入图片说明

红色部分是数据处理程序所在的位置,绿色部分是我获得clicked事件并调用该方法的位置。

我希望有人可以帮助我解决这个问题!

正如Jason在评论中提到的那样,您不能像这样从平台特定的地方访问代码,因为您没有引用平台特定的项目,并且有一个名为DependencyService东西(Jason也提到了),它将帮助您解决此“问题”你有。

这是您可以在共享代码项目内使用DependencyService ,在我的情况下,创建一个接口是:

public interface IDataHandler
{
    string GetSomeStringValue();
}

转到您的iOS或其他特定于平台的项目,并创建新的类DataHandler.cs(您已经拥有)。 并且它应该实现我们创建的该接口。 像这样:

[assembly: Dependency(typeof(DataHandler))]
namespace provisioning.ios
{
    public class DataHandler: IDataHandler
    {

        public DataHandler()
        {
        }

        public string GetSomeStringValue()
        {
            return "Some string value or whatever";
        }
    }
}

之后,当您想使用此方法时,将在共享代码项目内部使用DepedencyService,如下所示:

private void SomeMethod()
{
    string fromSpecificProject = DependencyService.Get<IDataHandler>().GetSomeStringValue();
}

如果您想要或需要,可以使用它向平台特定项目传递一些值,并像我在这个迷你示例中所做的那样返回数据。

请注意,必须为解决方案中的每个平台项目提供实现。 没有实现的平台项目将在运行时失败!

强烈建议您在此处查看官方文档。

我也做了一个关于Xamarin.Forms应用程序中Dependency Service用法的微型博客文章,您可以在这里找到。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM