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