Как вызвать метод зерна Орлеана без ссылки на реализацию зерна?
- Зерновой клиент — приложение .Net Core.
- Класс реализации Grain — классическая библиотека .Net Framework, и его нельзя добавить в приложение .Net Core.
Как вызвать метод зерна Орлеана без ссылки на реализацию зерна?
Из проекта клиента ссылка только на проект интерфейса (Core -> Standard).
Из основного проекта ссылайтесь на проект реализации (Полный -> Полный), а проект реализации ссылается на проект интерфейса (Полный -> Стандартный).
Это прекрасно работает, см.: https://github.com/lmagyar/SO_Question_50689964.
Консольное приложение .Net Framework
Install-Package Microsoft.Orleans.Core.Abstractions
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Server
class Program
{
static async Task Main(string[] args)
{
await StartSilo();
}
static async Task StartSilo()
{
using (var host = new SiloHostBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(SampleGrain).Assembly).WithReferences())
.Build())
{
await host.StartAsync();
Console.WriteLine("Silo started. Press any key to terminate...");
Console.ReadKey();
}
}
}
public class SampleGrain : Grain, ISample
{
public Task<string> Ping(string message)
{
Console.WriteLine($"Pinged with '{message}'");
return Task.FromResult($"Message '{message}' received");
}
}
Стандартная библиотека классов .Net
Install-Package Microsoft.Orleans.Core.Abstractions
public interface ISample : IGrainWithStringKey
{
Task<string> Ping(string message);
}
Консольное приложение .Net Core
Install-Package Microsoft.Orleans.OrleansCodeGenerator.Build
Install-Package Microsoft.Orleans.Client
static async Task Main(string[] args)
{
await PingSample();
}
static async Task PingSample()
{
using (var client = new ClientBuilder()
.UseLocalhostClustering()
//.ConfigureLogging(logging => logging.AddConsole())
.ConfigureApplicationParts(parts => parts.AddApplicationPart(typeof(ISample).Assembly).WithReferences())
.Build())
{
await client.Connect();
Console.WriteLine("Client successfully connected to silo host.");
var sample = client.GetGrain<ISample>("one");
var result = await sample.Ping("hello");
Console.WriteLine(result);
}
}
https://github.com/Serj-Tm/Orleans.MinimalSample