Project Orleans无法找到Grain实现求助(.NET 7+Orleans 7.0.2)
解决Orleans 7中无法找到Grain实现类的问题
出现这个错误的核心原因是:Orleans 7 默认不会自动扫描所有引用项目中的Grain实现类,即便你的ConsoleApp已经引用了Grains项目,也需要手动配置让Orleans明确加载包含Grain实现的程序集。
具体解决步骤
修改ConsoleApp项目中Program.cs的Orleans配置部分,添加程序集扫描配置:
var host = Host.CreateDefaultBuilder(args) .UseOrleans(builder => { builder.UseLocalhostClustering(); // 配置加载Grains项目的程序集,让Orleans能找到Grain实现 builder.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(StockGrain).Assembly).WithReferences()); }).Build(); await host.StartAsync(); var client = host.Services.GetRequiredService<IGrainFactory>(); var grain = client.GetGrain<IStock>(1); // 可添加调用验证功能是否正常 var stockCount = await grain.Get(); Console.WriteLine($"当前库存:{stockCount}"); await host.StopAsync();
代码说明
AddApplicationPart(typeof(StockGrain).Assembly):通过StockGrain的类型获取其所在的Grains项目程序集,告诉Orleans要扫描这个程序集里的Grain实现。WithReferences():自动加载该程序集引用的其他相关程序集(比如Contracts项目的程序集),确保Orleans能找到对应的Grain接口定义。
备选方案(按程序集名称加载)
如果你知道Grains项目的程序集名称,也可以直接通过名称指定:
builder.ConfigureApplicationParts(parts => parts.AddAssembly("Grains"));
额外检查项
确认ConsoleApp项目是项目引用Grains和Contracts项目,而非通过NuGet包引用——项目引用才能保证程序集被正确复制到输出目录,Orleans才能扫描到。
内容的提问来源于stack exchange,提问作者Kenan BAŞDEMİR
相关产品推荐
相关产品推荐

