У меня есть приложение Service Fabri c с одним сервисом, доступ к которому предоставляется Inte rnet ( GatewayService ) через веб-API ASP. NET и несколько внутренних служб, которых нет выставлен Inte rnet (назовем один из них InternalService ). Пока что InternalService также является ASP. NET веб-API, поэтому InternalService.cs
имеет метод CreateServiceInstanceListeners()
, который выглядит следующим образом:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return new[] {
new ServiceInstanceListener(serviceContext =>
new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
WebHost.CreateDefaultBuilder()
.UseStartup<Startup>()
.ConfigureServices((context, services) => { services.AddSingleton(serviceContext); })
.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
.UseUrls(url)
.Build()))
};
}
Класс запуска (в Startup.cs
) для InternalService настраивает некоторые службы, такие как добавление SQL DbContext в систему внедрения зависимостей и, конечно, настройка ASP. NET с помощью AddMvc()
et c. У меня есть пара ApiControllers, которые предоставляют API.
Это работает, НО Я не получаю никакой реальной безопасности типов с этим, и это обычно делает разработку немного громоздкой, требующей десериализовать результат вручную в моем GatewayService, прежде чем манипулировать им. Поэтому я решил вместо этого go с Service Remoting SF получить метод CreateServiceInstanceListeners()
, который выглядит следующим образом:
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
return this.CreateServiceRemotingInstanceListeners();
}
Затем я скопировал все логи c из контроллеры в InternalService.cs
тоже, но это приводит к проблеме: у меня больше нет доступа к моему DbContext, потому что он был внедрен в конструктор ApiController, инстанцированный ASP. NET в соответствии с правилами установить в класс Startup
, который больше не используется.
- Можно ли таким же образом использовать
Startup
при использовании Service Remoting? - Можно ли разделить API на несколько классов так же, как ApiControllers разделены на несколько классов? Я чувствую, что все открытые методы в одном и том же классе будут довольно неприятными.