【问题标题】:How to generate or create Grain Factory/Proxy?如何生成或创建 Grain Factory/Proxy?
【发布时间】:2015-08-22 22:08:48
【问题描述】:

我最近被介绍到奥尔良项目,目前正在做一些阅读和概念验证。

除了我遇到的几乎所有文章和教程都不能像现在这样(主要是由于 API 更改)之外,它们还需要安装 Orleans SDK;其中包含库、文档、项目模板等。

我决定用“硬方式”来做,并使用标准项目模板(控制台应用程序和类库)和 NuGet;在 Orleans 项目模板 (OrleansHostWrapper) 的样板代码的帮助下。

有一件事我不知道该怎么做;这是生成Grain factory/proxy。当我运行 Silo 时,我收到消息:

找不到接口的生成工厂类型

有人可以帮忙吗?有没有另外一种不用安装Orleans SDK就可以生成工厂的方法?

【问题讨论】:

  • 为什么要这么辛苦? Visual Studio 中的模板可以节省大量时间/头疼。
  • 因为我是新来的奥尔良。首先我了解它是如何工作的以及它为什么这样做,然后使用快捷方式:)

标签: orleans


【解决方案1】:

最简单的方法是将 nuget 包 Microsoft.Orleans.Templates.Grains 或 Microsoft.Orleans.Templates.Interfaces 添加到您的项目中,具体取决于您的项目类型。

https://www.nuget.org/packages/Microsoft.Orleans.Templates.Grains/ https://www.nuget.org/packages/Microsoft.Orleans.Templates.Interfaces/

这些将 codegen.cs 添加到生成代码的属性中。

目前我认为最好的做法是为接口创建一个项目,并为grain实现创建一个单独的项目。

【讨论】:

    【解决方案2】:

    我不知道这是否仍然与您相关,但 GetGrain 的静态方法现已弃用。

    你需要做这样的事情:

    var grainFactory = GrainClient.GrainFactory;
    var grain = grainFactory.GetGrain<MyGrain>(0);
    

    请记住,“MyGrain”现在必须从 Orleans.dll 继承“IGrainWithIntegerKey”接口。

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      我已经在Orleans Codeplex site 中提出了这个问题,并从 Sergey Bykov 那里得到了这个答案:

      Microsoft.Orleans.Templates.Interfaces 用于Grain 接口项目和Microsoft.Orleans.Templates.Grains 用于Grain 实现项目,可以在没有安装 SDK 的情况下构建这些项目。

      【讨论】:

      • 是的,grain接口工程模板或者grain接口NuGet包会在.csproj中添加&lt;Import Project="... .targets"&gt;元素,在构建过程中调用代码生成,根据接口生成工厂。这意味着您必须先构建grain接口项目,才能在grain项目中使用生成的工厂。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-11
      • 2021-11-25
      • 1970-01-01
      • 2011-03-18
      相关资源
      最近更新 更多