【发布时间】:2015-12-19 09:40:48
【问题描述】:
呃,抱歉标题不好,真的不知道什么是正确的(如果您看到更合适的内容,请更改)。
我有一个 DLL 文件,用于基于 WinRT 的项目(或者更确切地说,我在构建 Universal Windows 10 应用程序时使用它),我还将它用于“普通”桌面应用程序。但我的问题是我使用System.Activator.CreateInstance<T>(typeof(T), true) 能够使用私有构造函数创建一些类。这适用于桌面应用程序。但在 WinRT 上,方法 CreateInstance<T>(...) 不采用相同的参数。解决这个问题的最佳方法是什么?
我可以在运行时检查我是在 WinRT 上还是“正常”应用程序?并基于此使用适当的签名?
(抱歉,如果我使用 WinRT 等这个词是错误的,我很难理解所有这些通用应用程序术语是什么)
【问题讨论】:
-
为什么你认为它有不同的签名? (我不是 WinRT 方面的专家,但这似乎很不寻常。)
-
我知道它有不同的签名。因为我打开了一个 WinRT 项目,并且只有 3 个可用的签名。虽然桌面版有 13 个。几周前我还看到了一条评论(巧合),应该注意的是,情况就是这样(虽然找不到了)。 :)
-
我认为 WinRT 不支持这种重载。您可以调用
CreateInstance(Type),但CreateInstance(Type, bool)不可用,可能是由于沙盒安全限制。 -
是的,肖恩,我认为这就是我在帖子中所说的。但是我能做些什么来解决它?你是说我唯一的选择是只使用 CreateInstance(Type)?
-
@user2422321 - 你不走运因为
CreateInstance(Type)方法需要一个公共构造函数。您可能应该首先探索为什么需要使用私有构造函数创建类的副本。
标签: c# .net windows-runtime win-universal-app uwp