MagicOnion
MagicOnion copied to clipboard
`[MagicOnionClientGeneration]` does not generate inherited service methods
When generating client-side code using the [MagicOnionClientGeneration] attribute, methods are not generated if the interface inherits from anything other than IService<T>.
If an interface like the following exists, the FooAsync() method will not be generated.
namespace Sample.Shared;
public interface IFooService
{
UnaryResult FooAsync();
}
public interface IBarService : IService<IBarService>, IFooService
{
UnaryResult BarAsync();
}
The generated code is as follows:
// <auto-generated />
#pragma warning disable
namespace Sample
{
partial class MagicOnionClientInitializer
{
static partial class MagicOnionGeneratedClient
{
[global::MagicOnion.Ignore]
public class Sample_Shared_BarServiceClient : global::MagicOnion.Client.MagicOnionClientBase<global::Sample.Shared.Services.IBarService>, global::Sample.Shared.Services.IBarService
{
class ClientCore
{
public global::MagicOnion.Client.Internal.RawMethodInvoker<global::MessagePack.Nil, global::MessagePack.Nil> BarAsync;
public ClientCore(global::MagicOnion.Serialization.IMagicOnionSerializerProvider serializerProvider)
{
this.BarAsync = global::MagicOnion.Client.Internal.RawMethodInvoker.Create_ValueType_ValueType<global::MessagePack.Nil, global::MessagePack.Nil>(global::Grpc.Core.MethodType.Unary, "IBarService", "BarAsync", serializerProvider);
}
}
readonly ClientCore core;
public Sample_Shared_BarServiceClient(global::MagicOnion.Client.MagicOnionClientOptions options, global::MagicOnion.Serialization.IMagicOnionSerializerProvider serializerProvider) : base(options)
{
this.core = new ClientCore(serializerProvider);
}
private Sample_Shared_BarServiceClient(global::MagicOnion.Client.MagicOnionClientOptions options, ClientCore core) : base(options)
{
this.core = core;
}
protected override global::MagicOnion.Client.MagicOnionClientBase<global::Sample.Shared.Services.IBarService> Clone(global::MagicOnion.Client.MagicOnionClientOptions options)
=> new Sample_Shared_BarServiceClient(options, core);
public global::MagicOnion.UnaryResult<global::MessagePack.Nil> BarAsync()
=> this.core.BarAsync.InvokeUnary(this, "IBarService/BarAsync", global::MessagePack.Nil.Default);
}
}
}
}
The expected code is as follows:
// <auto-generated />
#pragma warning disable
namespace Sample
{
partial class MagicOnionClientInitializer
{
static partial class MagicOnionGeneratedClient
{
[global::MagicOnion.Ignore]
public class Sample_Shared_BarServiceClient : global::MagicOnion.Client.MagicOnionClientBase<global::Sample.Shared.Services.IBarService>, global::Sample.Shared.Services.IBarService
{
class ClientCore
{
public global::MagicOnion.Client.Internal.RawMethodInvoker<global::MessagePack.Nil, global::MessagePack.Nil> FooAsync;
public global::MagicOnion.Client.Internal.RawMethodInvoker<global::MessagePack.Nil, global::MessagePack.Nil> BarAsync;
public ClientCore(global::MagicOnion.Serialization.IMagicOnionSerializerProvider serializerProvider)
{
this.FooAsync = global::MagicOnion.Client.Internal.RawMethodInvoker.Create_ValueType_ValueType<global::MessagePack.Nil, global::MessagePack.Nil>(global::Grpc.Core.MethodType.Unary, "IBarService", "FooAsync", serializerProvider);
this.BarAsync = global::MagicOnion.Client.Internal.RawMethodInvoker.Create_ValueType_ValueType<global::MessagePack.Nil, global::MessagePack.Nil>(global::Grpc.Core.MethodType.Unary, "IBarService", "BarAsync", serializerProvider);
}
}
readonly ClientCore core;
public Sample_Shared_BarServiceClient(global::MagicOnion.Client.MagicOnionClientOptions options, global::MagicOnion.Serialization.IMagicOnionSerializerProvider serializerProvider) : base(options)
{
this.core = new ClientCore(serializerProvider);
}
private Sample_Shared_BarServiceClient(global::MagicOnion.Client.MagicOnionClientOptions options, ClientCore core) : base(options)
{
this.core = core;
}
protected override global::MagicOnion.Client.MagicOnionClientBase<global::Sample.Shared.Services.IBarService> Clone(global::MagicOnion.Client.MagicOnionClientOptions options)
=> new Sample_Shared_BarServiceClient(options, core);
public global::MagicOnion.UnaryResult<global::MessagePack.Nil> FooAsync()
=> this.core.FooAsync.InvokeUnary(this, "IBarService/FooAsync", global::MessagePack.Nil.Default);
public global::MagicOnion.UnaryResult<global::MessagePack.Nil> BarAsync()
=> this.core.BarAsync.InvokeUnary(this, "IBarService/BarAsync", global::MessagePack.Nil.Default);
}
}
}
}