Skip to content

Commit 762f05c

Browse files
authored
feat(ubuntu_service): Add generics for parameters (#338)
feat(ubuntu_service): Add parameter generics
1 parent 97847dc commit 762f05c

File tree

2 files changed

+18
-22
lines changed

2 files changed

+18
-22
lines changed

packages/ubuntu_service/lib/src/ubuntu_service.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ T? tryGetService<T extends Object>({String? id}) {
1414
}
1515

1616
/// Locates and invokes an injected service factory.
17-
T createService<T extends Object>(dynamic param, {String? id}) {
17+
T createService<T extends Object, P extends Object>(P param, {String? id}) {
1818
return _locator<T>(param1: param, instanceName: id);
1919
}
2020

2121
/// Locates and invokes an injected service factory or returns null if not found.
22-
T? tryCreateService<T extends Object>(dynamic param, {String? id}) {
23-
return hasService<T>(id: id) ? createService<T>(param, id: id) : null;
22+
T? tryCreateService<T extends Object, P extends Object>(P param, {String? id}) {
23+
return hasService<T>(id: id) ? createService<T, P>(param, id: id) : null;
2424
}
2525

2626
/// Returns whether a service is registered with the locator.
@@ -72,23 +72,23 @@ void tryRegisterServiceInstance<T extends Object>(T service, {String? id}) {
7272
}
7373

7474
/// Registers a service factory with the locator.
75-
void registerServiceFactory<T extends Object>(
76-
T Function(dynamic param) create, {
75+
void registerServiceFactory<T extends Object, P extends Object>(
76+
T Function(P param) create, {
7777
String? id,
7878
}) {
79-
_locator.registerFactoryParam<T, Object?, Object?>(
79+
_locator.registerFactoryParam<T, P, Object?>(
8080
(param, _) => create(param),
8181
instanceName: id,
8282
);
8383
}
8484

8585
/// Registers a service factory with the locator but only if not already registered.
86-
void tryRegisterServiceFactory<T extends Object>(
87-
T Function(dynamic param) create, {
86+
void tryRegisterServiceFactory<T extends Object, P extends Object>(
87+
T Function(P param) create, {
8888
String? id,
8989
}) {
9090
if (!hasService<T>(id: id)) {
91-
registerServiceFactory<T>(create, id: id);
91+
registerServiceFactory<T, P>(create, id: id);
9292
}
9393
}
9494

packages/ubuntu_service/test/ubuntu_service_test.dart

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -110,17 +110,15 @@ void main() {
110110
});
111111

112112
test('service factory', () {
113-
final s0 = tryCreateService<ServiceParam>('p0');
113+
final s0 = tryCreateService<ServiceParam, String>('p0');
114114
expect(s0, isNull);
115115

116-
registerServiceFactory<ServiceParam>(
117-
(dynamic param) => ServiceParam(param as String),
118-
);
116+
registerServiceFactory<ServiceParam, String>(ServiceParam.new);
119117

120-
final s1 = createService<ServiceParam>('p1');
118+
final s1 = createService<ServiceParam, String>('p1');
121119
expect(s1, isA<ServiceParam>().having((s) => s.param, 'param', 'p1'));
122120

123-
final s2 = createService<ServiceParam>('p2');
121+
final s2 = createService<ServiceParam, String>('p2');
124122
expect(s2, isA<ServiceParam>().having((s) => s.param, 'param', 'p2'));
125123
});
126124

@@ -152,20 +150,18 @@ void main() {
152150
test('try factory', () {
153151
expect(hasService<Service>(), isFalse);
154152

155-
tryRegisterServiceFactory<ServiceParam>(
156-
(dynamic param) => ServiceParam(param as String),
157-
);
153+
tryRegisterServiceFactory<ServiceParam, String>(ServiceParam.new);
158154
expect(hasService<ServiceParam>(), isTrue);
159155

160-
final s1 = createService<ServiceParam>('p1');
156+
final s1 = createService<ServiceParam, String>('p1');
161157
expect(s1, isA<ServiceParam>().having((s) => s.param, 'param', 'p1'));
162158

163159
// noop
164-
tryRegisterServiceFactory<ServiceParam>(
165-
(dynamic param) => ServiceParam('${param}2'),
160+
tryRegisterServiceFactory<ServiceParam, String>(
161+
(param) => ServiceParam('${param}2'),
166162
);
167163

168-
final s2 = createService<ServiceParam>('p2');
164+
final s2 = createService<ServiceParam, String>('p2');
169165
expect(s2, isA<ServiceParam>().having((s) => s.param, 'param', 'p2'));
170166
});
171167
}

0 commit comments

Comments
 (0)