@@ -44,9 +44,15 @@ void main() {
4444 final service = di.get <_FakeService >();
4545 expect (service.config, same (di.get <_TestConfig >()));
4646
47+ final singletonService = di.get <_SingletonFakeService >();
48+ expect (singletonService.config, same (di.get <_TestConfig >()));
49+
4750 final datasource = di.get <_FakeDatasource >();
4851 expect (datasource.config, same (di.get <_TestConfig >()));
4952
53+ final singletonDatasource = di.get <_SingletonFakeDatasource >();
54+ expect (singletonDatasource.config, same (di.get <_TestConfig >()));
55+
5056 final repo = await di.getAsync <_FakeRepo >();
5157 expect (repo.config, same (di.get <_TestConfig >()));
5258 expect (repo.initializeCallCount, greaterThanOrEqualTo (1 ));
@@ -56,6 +62,41 @@ void main() {
5662 await module.free ();
5763 });
5864
65+ group ('Injectables' , () {
66+ test ('marked as factory return a new instance per resolution' , () async {
67+ final module = _TestModule (_ImportModule ());
68+ await module.initialize ();
69+
70+ final serviceA = di.get <_FakeService >();
71+ final serviceB = di.get <_FakeService >();
72+ expect (serviceA, isNot (same (serviceB)));
73+
74+ final datasourceA = di.get <_FakeDatasource >();
75+ final datasourceB = di.get <_FakeDatasource >();
76+ expect (datasourceA, isNot (same (datasourceB)));
77+
78+ await module.free ();
79+ });
80+
81+ test (
82+ 'marked as singelton return the same instance per resolution' ,
83+ () async {
84+ final module = _TestModule (_ImportModule ());
85+ await module.initialize ();
86+
87+ final serviceA = di.get <_SingletonFakeService >();
88+ final serviceB = di.get <_SingletonFakeService >();
89+ expect (serviceA, same (serviceB));
90+
91+ final datasourceA = di.get <_SingletonFakeDatasource >();
92+ final datasourceB = di.get <_SingletonFakeDatasource >();
93+ expect (datasourceA, same (datasourceB));
94+
95+ await module.free ();
96+ },
97+ );
98+ });
99+
59100 test ('Classes are not available after disposing module' , () async {
60101 final importModule = _ImportModule ();
61102 final module = _TestModule (importModule);
@@ -68,7 +109,9 @@ void main() {
68109 expect (repo.disposed, isTrue);
69110 expect (di.isRegistered <_ExternalDependency >(), isFalse);
70111 expect (di.isRegistered <_FakeService >(), isFalse);
112+ expect (di.isRegistered <_SingletonFakeService >(), isFalse);
71113 expect (di.isRegistered <_FakeDatasource >(), isFalse);
114+ expect (di.isRegistered <_SingletonFakeDatasource >(), isFalse);
72115 expect (di.isRegistered <_FakeRepo >(), isFalse);
73116 expect (di.get <_TestConfig >(), isA <_TestConfig >());
74117 });
@@ -90,11 +133,13 @@ class _TestModule extends Module<int, _TestConfig> {
90133 @override
91134 void bindServices (Bind <Service , _TestConfig > bind) {
92135 bind ((config, resolver) => _FakeService (config));
136+ bind ((config, resolver) => _SingletonFakeService (config));
93137 }
94138
95139 @override
96140 void bindDatasources (Bind <Datasource , _TestConfig > bind) {
97141 bind ((config, resolver) => _FakeDatasource (config));
142+ bind ((config, resolver) => _SingletonFakeDatasource (config));
98143 }
99144
100145 @override
@@ -173,6 +218,20 @@ class _FakeService extends Service {
173218 String get logTag => '_FakeService' ;
174219}
175220
221+ class _SingletonFakeService extends Service {
222+ _SingletonFakeService (this .config);
223+
224+ final _TestConfig config;
225+
226+ @override
227+ bool get singelton => true ;
228+
229+ @override
230+ Future <void > free () async {}
231+ @override
232+ String get logTag => '_SingletonFakeService' ;
233+ }
234+
176235class _FakeDatasource extends Datasource {
177236 _FakeDatasource (this .config);
178237
@@ -184,6 +243,20 @@ class _FakeDatasource extends Datasource {
184243 String get logTag => '_FakeDatasource' ;
185244}
186245
246+ class _SingletonFakeDatasource extends Datasource {
247+ _SingletonFakeDatasource (this .config);
248+
249+ final _TestConfig config;
250+
251+ @override
252+ bool get singelton => true ;
253+
254+ @override
255+ Future <void > free () async {}
256+ @override
257+ String get logTag => '_SingletonFakeDatasource' ;
258+ }
259+
187260class _FakeRepo extends Repo <int > {
188261 _FakeRepo (this .config) {
189262 onInitialize (() => initializeHookRan = true );
0 commit comments