我有一个非常通用的数据库插入/查询,它可以作为非PCL方法正常工作。我试图将其转移到PCL项目中,对于大多数代码来说,没有问题。
但是,我发现各种System.Type方法都缺失了,而且我不知道如何解决这些问题。
我遇到问题的三种方法是GetMethod
,GetProperties
和GetCustomAttributes
。 IgnoreAttribute
属性缺少Length
。
我知道使用78个配置文件对Reflection进行了更改,但我找不到任何替换代码的内容
答案 0 :(得分:3)
答案 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可能会有所不同)