找不到 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.
我不明白为什么会出现这种异常,因为接口和颗粒都在同一个程序集中。任何人都可以提供任何想法吗?
这种情况有两种可能的解决方案:
- 添加 MSBuild 包参考:
<PackageReference Include="Microsoft.Orleans.CodeGenerator.MSBuild" Version="3.4.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
- 在 Startup 的 SiloBuilder 中,您可以使用
ConfigureApplicationParts
方法注册程序集。不推荐这样做,但可以这样做:
siloBuilder.ConfigureApplicationParts((Action<IApplicationPartManager>)(parts =>
{
parts.AddApplicationPart(typeof(SomeGrain).Assembly).WithReferences();
}));
我的程序集中有 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.
我不明白为什么会出现这种异常,因为接口和颗粒都在同一个程序集中。任何人都可以提供任何想法吗?
这种情况有两种可能的解决方案:
- 添加 MSBuild 包参考:
<PackageReference Include="Microsoft.Orleans.CodeGenerator.MSBuild" Version="3.4.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
- 在 Startup 的 SiloBuilder 中,您可以使用
ConfigureApplicationParts
方法注册程序集。不推荐这样做,但可以这样做:
siloBuilder.ConfigureApplicationParts((Action<IApplicationPartManager>)(parts =>
{
parts.AddApplicationPart(typeof(SomeGrain).Assembly).WithReferences();
}));