.net标准中缺少接口

时间:2019-12-07 19:48:43

标签: c# wpf data-binding .net-core-3.0 .net-standard-2.1

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

1 个答案:

答案 0 :(得分:1)

您可以自己重新创建接口,但是WPF框架将不会使用它。

但是,该接口在net core 3中可用。您可以以netstandard为目标。如果需要生成netstandard版本,建议您在netcore和net standard之间使用多目标,并且仅在net core(带有#IF xxx)中实现ICustomTypeProvider。见下文:

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