Pre-generated client codes
MagicOnion supports Unity, NativeAOT, and other platforms that require pre-generated client code with Source Generator (MagicOnion.Client.SourceGenerator).
MagicOnion.Client.SourceGenerator is shipped with MagicOnion.Client package. This means that you no longer need to the install generator tool (moc) and setup additional build steps.
Supported development environments
- Unity 2022.3.0f1 or later
- .NET 6 or later
- Visual Studio 2022 version 17.2 or later
- Rider 2023.1 or later
Usage
Define a partial
class with any name of your choosing within the application. Mark it with the MagicOnionClientGeneration
attribute, and specify any service type found within the assembly where you want to search for the service interface.
For example, if the MyApp.Shared
assembly contains MyApp.Shared.Services.IGreeterService
and MyApp.Shared.Hubs.IChatHub
, specify one of them.
using MagicOnion.Client;
[MagicOnionClientGeneration(typeof(MyApp.Shared.Services.IGreeterService))]
partial class MagicOnionGeneratedClientInitializer {}
Next, configure MessagePack to use the generated MessagePack Resolver (MagicOnionGeneratedClientInitializer.Resolver
property). This is the same as when using the legacy MagicOnion.Generator.
#if UNITY_2019_4_OR_NEWER
[UnityEngine.RuntimeInitializeOnLoadMethod(UnityEngine.RuntimeInitializeLoadType.BeforeSceneLoad)]
#elif NET5_0_OR_GREATER
[System.Runtime.CompilerServices.ModuleInitializer]
#endif
static void RegisterResolvers()
{
StaticCompositeResolver.Instance.Register(
// Add: Use MessagePack formatter resolver generated by the source generator.
MagicOnionGeneratedClientInitializer.Resolver,
StandardResolver.Instance,
);
MessagePackSerializer.DefaultOptions = MessagePackSerializer.DefaultOptions
.WithResolver(StaticCompositeResolver.Instance);
}
Source generation options
You can specify options in the named constructor of the attribute.
DisableAutoRegistration
: Sets whether to disable automatically callingRegister
during start-up. (Automatic registration requires .NET 5+ or Unity)Serializer
: Sets the serializer used for message serialization. The default value isGenerateSerializerType.MessagePack
.
Additional options
You can specify additional options with the MagicOnionClientGenerationOption
attribute.
For MessagePack, there are options for compatibility with the previous mpc.
MessagePack.FormatterNamespace
: Specifies the namespace of the pre-generated Formatter. The default isMessagePack.Formatters
.MessagePack.GenerateResolverForCustomFormatter
: Specifies whether to use pre-generated MessagePack Formatter. The default isfalse
.