【问题标题】:WinRT WinJS + C#WinRT WinJS + C#
【发布时间】:2013-05-11 03:13:44
【问题描述】:

我是 WinRT 领域的新手。我们公司已经开始开发 Windows 8 商店应用程序。我最初是在 XAML / C# 中开始开发的,直到我意识到我可以在 WINJS 中使用 javascript 和 html ;)。

我已经编写了很多 C# 代码来执行调用,特别是使用 HTTPClient 进行 REST 调用的方法。

1.我可以重用这些方法并从我的 JS 中调用它们吗? 2.是否需要将它们重新打包到类库或运行时组件中 3.如何在javascript中访问这些类?

任何朝着正确方向的推动都会非常有帮助。

非常感谢。

【问题讨论】:

  • 如果您的应用程序通过rest api连接到Web服务,您可能会考虑在winrt中放置一个服务客户端包装器并在js代码中从视图模型中使用它。
  • 你有这样做的例子吗?
  • 到目前为止,我还没有为我的应用程序实现 c# 和 JS 之间的代码重用。我已经完全用 winjs 或 c# 编写了它们。因此,我没有示例代码。
  • 将 c# 转换为 javascript:JSIL、scriptsharp、SharpKit、bridge.net 或 cshtml5。我不知道这些是否适用于 WinRT 或 WinJS,但这是我会尝试做的。 AFAIK,这些解决方案旨在让您继续使用 C# 进行开发,本质上是使用 javascript 作为“汇编语言”进行部署。 (与从一种语言到另一种语言的一次性翻译相反,这是一种帮助移植到不同平台的方式。)

标签: c# visual-studio windows-runtime winjs


【解决方案1】:

是的,您需要重新包装它们。从文件新项目(而不是类库类型)创建 Windows 运行时组件项目。当你编译时,你会看到你需要修复什么,因为对类型有一些限制。

类需要密封,不能继承(有限情况除外)等限制。此项目类型创建可供您的 JavaScript 应用使用的 .winmd(元数据)。

重要提示来自这里:.NET Framework Support for Windows Store Apps and Windows Runtime

如果您的组件仅用于 C# 或 Visual Basic,则没有理由将其设为 Windows 运行时组件。如果将其改为普通的 .NET Framework 类库,则不必将其公共 API 表面限制为 Windows 运行时类型。

【讨论】:

  • 感谢您的回复。我对WinJS 的研究越多,我的疑虑就越多。看来您在数据处理方面松了很多?这会准确吗?我定义了一堆与我的 HTTP 客户端一起使用的 JSON 对象。我没有看到将它们绑定到 html 的任何直接方法?
  • 通过 WinJS 或任何绑定框架提供的大量绑定选项 - 请参阅我的博客文章:completedevelopment.blogspot.com/2013/04/… 如果您正在查看不同的场景,请询问我,我当然能想到一些东西。
  • 谢谢,我的对象是用 C# 编写的。我会多花点时间。
【解决方案2】:

如果您将 C# 类型更改为 WinRT 类型,您应该可以从 JS 调用它们。这是 MSDN documentation 帮助您入门

【讨论】:

  • 请注意,不建议在一个应用程序中混合使用 C# 和 JS。因为加载 .net 组件会将 .net 运行时引入 wwahost.exe 进程,从而显着增加应用程序的内存占用。
  • @philk 建议在哪里避免它?该选项可用于这些类型的情况。我不建议重写你的代码库来避免这种情况。
  • MSFT 不推荐它,根据kraigbrockschmidt.com/blog/?p=497 。除此之外,OP 描述的场景在纯 JS 中实现似乎并不太复杂。可以在 JS 中使用 C# 是的,但它会损害您的应用程序的内存占用,并使您的应用程序更有可能是第一个因此而被关闭的应用程序之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-01
  • 1970-01-01
  • 2013-02-23
  • 2020-12-17
相关资源
最近更新 更多