@@ -39,11 +39,13 @@ class TestClassDisposable extends TestBaseClass with Disposable {
39
39
40
40
class TestClass2 {}
41
41
42
- class TestClassParam {
42
+ class TestClassParam extends TestBaseClass {
43
43
final String ? param1;
44
44
final int ? param2;
45
45
46
- TestClassParam ({this .param1, this .param2});
46
+ TestClassParam ({this .param1, this .param2}) {
47
+ constructorCounter++ ;
48
+ }
47
49
}
48
50
49
51
class TestClassDisposableWithDependency with Disposable {
@@ -216,6 +218,80 @@ void main() {
216
218
GetIt .I .reset ();
217
219
});
218
220
221
+ test ('register cached factory' , () {
222
+ final getIt = GetIt .instance;
223
+ constructorCounter = 0 ;
224
+ getIt.registerCachedFactory <TestBaseClass >(() => TestClass ());
225
+ final TestBaseClass instance1 = getIt <TestBaseClass >();
226
+ expect (instance1 is TestClass , true );
227
+ final instance2 = getIt.get <TestBaseClass >();
228
+ expect (getIt.isRegistered <TestBaseClass >(), true );
229
+ expect (instance1, instance2);
230
+ expect (constructorCounter, 1 );
231
+ });
232
+
233
+ test ('register cached factory with one param ' , () {
234
+ final getIt = GetIt .instance;
235
+ constructorCounter = 0 ;
236
+ getIt.registerCachedFactoryParam <TestClassParam , String , void >(
237
+ (s, _) => TestClassParam (param1: s),
238
+ );
239
+ final instance1 = getIt <TestClassParam >(param1: 'abc' );
240
+ final instance2 = getIt <TestClassParam >(param1: 'abc' );
241
+ expect (instance1 is TestClassParam , true );
242
+ expect (instance1.param1, 'abc' );
243
+ expect (instance1, instance2);
244
+ expect (constructorCounter, 1 );
245
+ });
246
+
247
+ test ('register cached factory with different params' , () {
248
+ final getIt = GetIt .instance;
249
+ constructorCounter = 0 ;
250
+ getIt.registerCachedFactoryParam <TestClassParam , String , void >(
251
+ (s, _) => TestClassParam (param1: s),
252
+ );
253
+ final instance1 = getIt <TestClassParam >(param1: 'abc' );
254
+ final instance2 = getIt <TestClassParam >(param1: '123' );
255
+ expect (instance1 is TestClassParam , true );
256
+ expect (instance1.param1, 'abc' );
257
+ expect (instance2.param1, '123' );
258
+ expect (instance2 is TestClassParam , true );
259
+ expect (instance1, isNot (instance2));
260
+ expect (constructorCounter, 2 );
261
+ });
262
+
263
+ test ('register cached factory with two equal params' , () {
264
+ final getIt = GetIt .instance;
265
+ constructorCounter = 0 ;
266
+ getIt.registerCachedFactoryParam <TestClassParam , String , int >(
267
+ (f, s) => TestClassParam (param1: f, param2: s),
268
+ );
269
+ final instance1 = getIt <TestClassParam >(param1: 'abc' , param2: 1 );
270
+ final instance2 = getIt <TestClassParam >(param1: 'abc' , param2: 1 );
271
+ expect (instance1 is TestClassParam , true );
272
+ expect (instance1.param1, 'abc' );
273
+ expect (instance1, instance2);
274
+ expect (constructorCounter, 1 );
275
+ });
276
+
277
+ test ('register cached factory with one different param out of two' , () {
278
+ final getIt = GetIt .instance;
279
+ constructorCounter = 0 ;
280
+ getIt.registerCachedFactoryParam <TestClassParam , String , int >(
281
+ (f, s) => TestClassParam (param1: f, param2: s),
282
+ );
283
+ final instance1 = getIt <TestClassParam >(param1: 'abc' , param2: 1 );
284
+ final instance2 = getIt <TestClassParam >(param1: 'abc' , param2: 2 );
285
+ expect (instance1 is TestClassParam , true );
286
+ expect (instance1.param1, 'abc' );
287
+ expect (instance1.param2, 1 );
288
+ expect (instance2.param1, 'abc' );
289
+ expect (instance2.param2, 2 );
290
+ expect (instance2 is TestClassParam , true );
291
+ expect (instance1, isNot (instance2));
292
+ expect (constructorCounter, 2 );
293
+ });
294
+
219
295
test ('register constant' , () {
220
296
final getIt = GetIt .instance;
221
297
constructorCounter = 0 ;
0 commit comments