找不到 grain 接口的实现 class

Cannot find an implementation class for grain interface

我的程序集中有 2 个接口,以及实现它们的 2 个 grains。

public interface IGrain1:IGrainWithIntegerKey { void SomeMethod(); }
public interface IGrain2:IGrainWithIntegerKey { void SomeOtherMethod(); }

public Grain1:IGrain1
{
   public void SomeMethod()
   {
        var grain2=this.GrainFactory.GetGrain<IGrain2>([somekey]);
   }
}

public Grain2:IGrain2
{
       void SomeOtherMethod(){}
}

IGrain2 类型 grain 的调用抛出:

Cannot find an implementation class for grain interface: [path].IGrain2 . Make sure the grain assembly was correctly deployed and loaded in the silo.

我不明白为什么会出现这种异常,因为接口和颗粒都在同一个程序集中。任何人都可以提供任何想法吗?

这种情况有两种可能的解决方案:

  1. 添加 MSBuild 包参考:
 <PackageReference Include="Microsoft.Orleans.CodeGenerator.MSBuild" Version="3.4.2">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
 </PackageReference>
  1. 在 Startup 的 SiloBuilder 中,您可以使用 ConfigureApplicationParts 方法注册程序集。不推荐这样做,但可以这样做:
siloBuilder.ConfigureApplicationParts((Action<IApplicationPartManager>)(parts =>
  {  
     parts.AddApplicationPart(typeof(SomeGrain).Assembly).WithReferences();
  }));