---
# System prepended metadata

title: gRPC MagicOnion 別のプロジェクトにある `ServiceBase<TServiceInterface>` をサービスとして使用する方法 2021-09-14
tags: [MagicOnion, gRPC, ServiceBase]

---

---
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`
