目前是否有一种方法可以使用 .NET Standard 实例化内部 class?
Is there currently a way to instantiate an internal class using .NET Standard?
我一直在寻找解决这个问题的方法 - 考虑到这应该是多么简单。我有一个针对 netstandard1.5
和 net451
的库。它在 net451
中运行良好。整个库中的一个 class 中有一个方法使用 .NET 反射创建一个类型的实例,该实例具有来自另一个库的内部构造函数(它也同时针对 netstandard1.5
和 net451
).
但是,似乎我需要 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()
并不是绝对必要的,但强烈建议包括无论如何,以免将来添加构造函数时代码中断。
我一直在寻找解决这个问题的方法 - 考虑到这应该是多么简单。我有一个针对 netstandard1.5
和 net451
的库。它在 net451
中运行良好。整个库中的一个 class 中有一个方法使用 .NET 反射创建一个类型的实例,该实例具有来自另一个库的内部构造函数(它也同时针对 netstandard1.5
和 net451
).
但是,似乎我需要 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()
并不是绝对必要的,但强烈建议包括无论如何,以免将来添加构造函数时代码中断。