Как создать сервер do tnet gRP C без использования конкретных экземпляров - PullRequest
0 голосов
/ 06 апреля 2020

Итак, я пытаюсь создать основное приложение. Net, которое имеет REST и gRP C.

Ожидаемые результаты: Иметь одно работающее приложение, поддерживающее работающий REST на одном порту и gRP C на другом.

REST очень просто. Это где приложение начинается. Но чтобы настроить порт gRP C, я увидел, что мне нужно создать экземпляр сервера:

        Server server = new Server
        {
            Services = { Greeter.BindService(new GreeterImpl()) }
            Ports = { new ServerPort("0.0.0.0", 5001, ServerCredentials.Insecure) }
        };

        server.Start();

Это нормально, пока мы фактически не используем его, и, как и любому другому «контроллеру», GreeterImpl требует внедрения зависимостей из служб:

        private readonly IExampleService _exampleService;

        public GreeterImpl (IExampleService exampleService)
        {
            _exampleService = exampleService;
        }

Теперь первый фрагмент кода не будет работать, так как для "нового GreeterImpl ()" требуется IExampleService. Я искал в Интернете, как получить ServerServiceDefinition (вещь, возвращенную из Greeter.BindService ()) без использования конкретных реализаций, но ничего не нашел. Итак, как это сделать или я нахожусь на совершенно неверном пути?

1 Ответ

0 голосов
/ 07 апреля 2020

Итак, я понял это с неверной идеей. В свою очередь, вы можете использовать

app.ApplicationServices.GetService(typeof({YOUR_SERVICE}))

, где "app" - это "IApplicationBuilder", а затем просто использовать полученный сервис в ".BindService ()". В конце мы не изменяем «.BindService ()», а передаем его работающему сервису для привязки.

Важное примечание: сначала вы должны зарегистрировать свой сервис. В моем случае я использовал AutoFa c, чтобы зарегистрировать его

...