目前是否有一种方法可以使用 .NET Standard 实例化内部 class?

Is there currently a way to instantiate an internal class using .NET Standard?

我一直在寻找解决这个问题的方法 - 考虑到这应该是多么简单。我有一个针对 netstandard1.5net451 的库。它在 net451 中运行良好。整个库中的一个 class 中有一个方法使用 .NET 反射创建一个类型的实例,该实例具有来自另一个库的内部构造函数(它也同时针对 netstandard1.5net451 ).

但是,似乎我需要 Activator.CreateInstance 的重载接受 BindingFlags...

public static object CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, object[] args, CultureInfo culture)

...在 netstandard1.5 甚至 netstandard1.6 中不可用。我看到它 will be in netstandard2.0,但尚未发布。

我尝试创建一个便携式 Class 库,但我似乎无法从中引用以 netstandard1.5 为目标的依赖库。我刚收到错误:

Severity    Code    Description Project File    Line    Suppression State
Error       Package OtherPackage 3.1.0-beta00001 is not compatible with dotnet5.0 (.NETPlatform,Version=v5.0). Package OtherPackage 3.1.0-beta00001 supports:
    - net451 (.NETFramework,Version=v4.5.1)
    - netstandard1.5 (.NETStandard,Version=v1.5)                

那么,如果您在内部成员上使用反射,目前真的没有支持 .NET Core 的方法吗?如果有,怎么办?

虽然 netstandard1.5 缺乏反射的全部特征,但基础知识是可用的。给定具有无参数构造函数(无论可见性如何)的 class T,这就是动态构造实例的方式:

ConstructorInfo c = typeof(T)
    .GetTypeInfo()
    .DeclaredConstructors
    .Single(ci => ci.GetParameters().Length == 0)
;
T t = (T) c.Invoke(Type.EmptyTypes);

如果您知道该类型只有一个构造函数(您可以改用 .First,或者省略谓词),那么调用 .Single() 并不是绝对必要的,但强烈建议包括无论如何,以免将来添加构造函数时代码中断。