PCL中缺少方法

时间:2015-01-23 23:30:40

标签: c# xamarin.ios xamarin.android portable-class-library

我有一个非常通用的数据库插入/查询,它可以作为非PCL方法正常工作。我试图将其转移到PCL项目中,对于大多数代码来说,没有问题。

但是,我发现各种System.Type方法都缺失了,而且我不知道如何解决这些问题。

我遇到问题的三种方法是GetMethodGetPropertiesGetCustomAttributesIgnoreAttribute属性缺少Length

我知道使用78个配置文件对Reflection进行了更改,但我找不到任何替换代码的内容

3 个答案:

答案 0 :(得分:3)

使用扩展方法,this是MvvmCross处理它的方式。

GetMethod

GetProperties

GetCustomAttributes

答案 1 :(得分:0)

您可以在PCL项目中创建一个界面IReflectionHelper

/// <summary>
/// This interface provides some reflection methods which are not supported into PCL.
/// </summary>
    public interface IReflectionHelper
    {
        /// <summary>
        /// Get <see cref="MethodInfo"/> for the given type.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="methodName">The name of the method.</param>
        /// <returns>Returns method info.</returns>
        MethodInfo GetMethodInfo(Type type, string methodName);
    }

然后你应该为每个特定平台实现它。这是Android的一个例子。

[assembly: Xamarin.Forms.Dependency(typeof(DroidReflectionHelper))]
namespace App1.Droid
{
    /// <summary>
    /// Implementation of the <see cref="IReflectionHelper"/> for Android platform.
    /// </summary>
    public class DroidReflectionHelper : IReflectionHelper
    {
        /// <summary>
        /// Get <see cref="MethodInfo"/> for the given type.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="methodName">The name of the method.</param>
        /// <returns>Returns method info.</returns>
        public MethodInfo GetMethodInfo(Type type, string methodName)
        {
            MethodInfo methodInfo = type.GetMethod(methodName);
            return methodInfo;
        }
    }
}

我在我的样本中使用了服务定位器。您可以在此处详细了解:Introduction to DependencyService

答案 2 :(得分:0)

您可以使用System.Reflection作为System.Reflection;在你的班级档案中。

然后使用以下命令通过以下命令安装TypeExtensions:

PM> Install-Package System.Reflection.TypeExtensions

现在你可以得到如下方法:

GetProperties - typeof(Something).GetProperties();

GetCustomAttribute - CustomAttributeExtensions.GetCustomAttribute(Args可能会有所不同)