| |
| |
| |
| # exposeServiceProvider<T extends Service> method |
| |
| |
| |
| |
| *[<Null safety>](https://dart.dev/null-safety)* |
| |
| |
| |
| |
| void exposeServiceProvider |
| <T extends Service>([ServiceProvider](../../package-fuchsia_modular_agent/ServiceProvider.md)<T> serviceProvider, [ServiceData](../../package-fidl_fidl/ServiceData-class.md)<T> serviceData) |
| |
| |
| |
| |
| |
| <p>Similar to <code>#exposeService</code> but instead of passing the service |
| implementation directly, pass a provider function that can be invoked |
| asynchronously, when a request is received, to provide the service |
| implementation at run time.</p> |
| <p><code>serviceData</code> can be found as part of the generated FIDL bindings, it |
| holds the service runtime name and bindings object used for establishing a |
| connection.</p> |
| <p><a href="../../package-fuchsia_modular_agent/ServiceProvider.md">ServiceProvider</a> is defined as follows:</p> |
| <pre class="language-dart"><code>typedef ServiceProvider<T> = FutureOr<T> Function(); |
| </code></pre> |
| <p>Where <code>T</code> represents the service type.</p> |
| <p>Usage example:</p> |
| <pre class="language-dart"><code>import 'package:fidl_fuchsia_foo/fidl_async.dart' as fidl; |
| import 'package:fuchsia_modular/agent.dart'; |
| import 'src/foo_service_impl.dart'; |
| |
| void main(List<String> args) { |
| final context = ComponentContext.create(); |
| Agent() |
| ..exposeServiceProvider(getService, fidl.FooServiceData()) |
| ..serve(context.outgoing); |
| context.outgoing.serveFromStartupInfo(); |
| } |
| |
| FutureOr<FooServiceImpl> getService() { |
| // do something fancy here |
| return FooServiceImpl(); |
| } |
| |
| class FooServiceImpl extends fidl.FooService { ... } |
| </code></pre> |
| |
| |
| |
| ## Implementation |
| |
| ```dart |
| void exposeServiceProvider<T extends Service>( |
| ServiceProvider<T> serviceProvider, ServiceData<T> serviceData); |
| ``` |
| |
| |
| |
| |
| |
| |
| |