blob: 3103e4e28dc31393cf12e9f338f66194d99793b1 [file] [log] [blame] [view] [edit]
# exposeServiceProvider<T extends Service> method
*[<Null safety>](https://dart.dev/null-safety)*
void exposeServiceProvider
&lt;T extends Service>([ServiceProvider](../../package-fuchsia_modular_agent/ServiceProvider.md)&lt;T> serviceProvider, [ServiceData](../../package-fidl_fidl/ServiceData-class.md)&lt;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&lt;T&gt; = FutureOr&lt;T&gt; 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&lt;String&gt; args) {
final context = ComponentContext.create();
Agent()
..exposeServiceProvider(getService, fidl.FooServiceData())
..serve(context.outgoing);
context.outgoing.serveFromStartupInfo();
}
FutureOr&lt;FooServiceImpl&gt; 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);
```