欧博allbetMultiple implementations of same grain int

I have an Orleans applications with the following structure:

public interface IGraintest : Orleans.IGrainWithGuidCompoundKey { Task Init(); } public abstract class GraintestImpl<T> : Grain, IGraintest, Deserializer<T> { string streamName; public Task Init() { return Task.CompletedTask; } public override async Task OnActivateAsync() { var primaryKey = this.GetPrimaryKey(out streamName); var streamProvider = GetStreamProvider("SMSProvider"); var stream = streamProvider.GetStream<String>(primaryKey, streamName); // To resume stream in case of stream deactivation var subscriptionHandles = await stream.GetAllSubscriptionHandles(); if (subscriptionHandles.Count > 0) { foreach (var subscriptionHandle in subscriptionHandles) { await subscriptionHandle.ResumeAsync(OnNextMessage); } } await stream.SubscribeAsync(OnNextMessage); } public abstract T Process(string l); private Task OnNextMessage(string message, StreamSequenceToken sequenceToken) { T obj = Process(message); //gonna do something with obj here return Task.CompletedTask; } } public class ProcessImplA: GraintestImpl<Car> { public override Car Process(string l) { return new Car(l); } } public class ProcessImplB: GraintestImpl<Boat> { public override Boat Process(string l) { return new Boat(l); } }

Here I have a grain that I use to read messages from a stream and apply some operation to them. Since I have different object types I want to work with I created an abstract class to implement the interface. The problem lies here:

var sourceOne = client.GetGrain<IGraintest>(guid, "Car"); var sourceTwo = client.GetGrain<IGraintest>(guid, "Boat");

When I run the program like this I get the error code:

Exception while trying to run client: Cannot resolve grain interface ID=-<blabla> to a grain class because of multiple implementations of it

So my question is, can I do a minor change to make this work or do I have to create a grain interface for each ProcessImpl grain that I want to utilize?

2025-08-02 00:18 点击量:2