Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .net标准中缺少接口_C#_Wpf_Data Binding_.net Core 3.0_.net Standard 2.1 - Fatal编程技术网

C# .net标准中缺少接口

C# .net标准中缺少接口,c#,wpf,data-binding,.net-core-3.0,.net-standard-2.1,C#,Wpf,Data Binding,.net Core 3.0,.net Standard 2.1,我正在尝试将端口a类实现到我的.net标准2.1库中。该类实现了ICustomTypeProvider,以便WPF可以绑定到一些动态属性。该接口在.net标准中不可用。我理解为什么没有这个界面,但它是一个简单的界面,我可以自己重新创建。我的问题是:如果我在.net标准库中重新创建了这个接口,那么当我在WPF库中使用该类时,是否有一种方法可以将其识别为预定义的ICustomTypeProvider,而无需在其周围创建包装类?如果我需要走包装路线,这很酷,我只是想知道我是否错过了一个更干净的方法来实

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

您可以自己重新创建接口,但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>
在这种情况下,在非netcoreapp3.0目标上,接口将不存在。如果需要,可以这样添加并删除前面的#If行:

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

有关预处理器符号列表,请参见

,此接口在net core 3中提供。您应该将其作为目标,而不是netstandard。如果您在内部重新创建接口,wpf框架将不会使用它。我理解这一点,但该类将被其他.net标准库使用。它需要采用.net标准。我很确定我只需要在我的.net核心库中创建一个包装器。这将是一个相对容易的过程。我只是希望有一些设计模式可以简化这一点,这样我就不必承诺在类中维护包装器。你也可以在netcore和net standard之间实现多目标,并且只在netcore中实现
ICustomTypeProvider
(使用
#如果xxx
)啊,是的,我没有想到这一点。这可能是更好的选择。谢谢。对否决票的解释会很好。这与我实现解决方案的方式非常相似,而且效果很好。非常感谢。
#if !NETCOREAPP3_0
namespace System.Reflection
{
    public interface ICustomTypeProvider
    {
        Type GetCustomType ();
    }
}
#endif