.net 标准中缺少接口

Missing interface in .net standard

我正在尝试将端口 a class 实现到我的 .net 标准 2.1 库。 class 实现 ICustomTypeProvider 以便 WPF 可以绑定到某些动态属性。该接口在 .net 标准中不可用。我明白为什么没有这个界面,但它是一个我自己重新创建的简单界面。我的问题是:如果我确实在我的 .net 标准库中重新创建了这个接口,那么当我在我的 WPF 库中使用 class 时,是否有一种方法可以将其识别为预定义的 ICustomTypeProvider 不需要围绕它创建一个包装器 class?如果我需要走很酷的包装路线,我只是想知道我是否缺少一种更简洁的方法来实现它,但我没有找到任何东西。感谢您的任何见解。

您可以自己重新创建界面,但 WPF 框架不会使用它。

但是,此接口在 net core 3 中可用。您可以将其作为目标而不是 netstandard。如果您需要生成一个 netstandard 版本,我建议您在 netcore 和 net standard 之间使用多目标,并且只在 net core 中实现 ICustomTypeProvider(使用#IF xxx)。见下文:

Project.csproj

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;netstandard2.1;netcoreapp3.0</TargetFrameworks>
  </PropertyGroup>

</Project>

Class1.cs

using System;

namespace lib
{
    public class Class1
#if NETCOREAPP3_0
    : System.Reflection.ICustomTypeProvider
#endif
    {
        public Type GetCustomType()
        {
#if !NETCOREAPP3_0
            throw new NotSupportedException();
#else
            return this.GetType(); // return your impl
#endif
        }
    }
}

在这种情况下,在非 netcoreapp3.0 目标上接口将不存在。如果你需要它,就这样添加它并删除前面的 #if 行:

#if !NETCOREAPP3_0
namespace System.Reflection
{
    public interface ICustomTypeProvider
    {
        Type GetCustomType ();
    }
}
#endif

有关预处理器符号列表,请参阅 https://docs.microsoft.com/en-us/dotnet/standard/frameworks