Благодарю за твое предложение! Я внес изменения в пакет. Добавил возможность перезаписывать зависимость с помощью метода overrideWith, выглядит это так:
void main() {
final depsNode = FeatureDepsNode();
// Override dependency with a mock
depsNode.featureManager.overrideWith(() => MockFeatureManager());
final featureManager = depsNode.featureManager();
// Use featureManager in tests
}
Тут очень просто все мокать. Достаточно создать интерфейс для необходимой зависимости
class CounterDepsNode extends DepsNode {
late final counterManager = bind<ICounterManager>(
() => CounterManager(
counterStateHolder(),
),
);
...
}
abstract interface class ICounterManager {
void increaseBy(int count);
}
class CounterManager implements ICounterManager {
final CounterStateHolder _counterStateHolder;
const CounterManager(this._counterStateHolder);
@override
void increaseBy(int count) {
for (int i = 0; i < count; i++) {
_counterStateHolder.increment();
}
}
}
Более того, ты можешь сделать родителем для AuthScope какой-либо интерфейс и портировать основную логику приложения от родителя к родителю
class AuthScopeDepsNode {
final IBaseAppScope _appScope;
AuthScopeDepsNode(this._appScope);
late final counterDepsNode = bind(() => CounterDepsNode());
@override
List<Set<LifecycleDependency>> get initializeQueue = [
{
counterDepsNode,
},
];
}
class IBaseAppScope {
AuthManager get authManager;
}
class AppScopeDepsNode implements IBaseAppScope {
late final authScopeDepsNode = bind(() => AuthScopeDepsNode(this));
@override
late final authManager = bind(
() => AuthManager(
authScopeDepsNode(),
)
);
}
Благодарю за твое предложение! Я внес изменения в пакет. Добавил возможность перезаписывать зависимость с помощью метода overrideWith, выглядит это так:
Кроме того, я добавил этот раздел в README пакета, будет проще разобраться, ссылочка: https://pub.dev/packages/flutter_sputnik_di#mocking-dependencies-with-overridewith
Если у тебя будут еще какие-нибудь вопросы или пожелания, можешь писать мне. Мои контакты есть в профиле. Спасибо.
Добра и любви)
Тут очень просто все мокать. Достаточно создать интерфейс для необходимой зависимости
Более того, ты можешь сделать родителем для AuthScope какой-либо интерфейс и портировать основную логику приложения от родителя к родителю
Спасибо за вопрос!
Спасибо)
ага, но концепция DI и Service Locator остаются неизменными. В Spring скорее всего тоже уже поменялся механизм