--- lang: ja-jp breaks: true --- # gRPC MagicOnion 別のプロジェクトにある `ServiceBase<TServiceInterface>` をサービスとして使用する方法 2021-09-14 ## ダミークラスを事前に呼び出し、アセンブリをロードしておく ### Startup.cs `ServiceBase<TServiceInterface>`が格納されているDLL内の何かしらのクラスをいったん利用してDLLを読み込む。以下の例では、何もしない`ServiceDummy`クラスのインスタンスを作成してDLLを読み込ませている。 ```csharp= public void ConfigureServices(IServiceCollection services) { // AddMagicOnion()を実行する前に必要なアッセンブリを読み込んでおく必要がある。 ServiceDummy dummy = new ServiceDummy(); var assemblies = AppDomain.CurrentDomain.GetAssemblies(); foreach (var item in assemblies) { Console.WriteLine(item); } services.AddGrpc(); services.AddMagicOnion(); } ``` ## `services.AddMagicOnion`のパラメータに該当アセンブリを指定する(こっちが正当なやり方) > https://github.com/Cysharp/MagicOnion/blob/master/src/MagicOnion.Server/Extensions/MagicOnionServicesExtensions.cs ```csharp= public void ConfigureServices(IServiceCollection services) { Assembly[] searchAssemblies = new Assembly[] { typeof(ServiceDummy).Assembly }; services.AddGrpc(); MessagePackSerializerOptions option = MessagePackSerializerOption.Option; services.AddMagicOnion(searchAssemblies, (n) => n.SerializerOptions = option); } ``` ###### tags: `MagicOnion` `gRPC` `ServiceBase`