Search
Write a publication
Pull to refresh
3
0
Губин Алексей @webmadness

User

Send message

Благодарю за твое предложение! Я внес изменения в пакет. Добавил возможность перезаписывать зависимость с помощью метода overrideWith, выглядит это так:

void main() {
  final depsNode = FeatureDepsNode();

  // Override dependency with a mock
  depsNode.featureManager.overrideWith(() => MockFeatureManager());

  final featureManager = depsNode.featureManager();

  // Use featureManager in tests
}

Кроме того, я добавил этот раздел в README пакета, будет проще разобраться, ссылочка: https://pub.dev/packages/flutter_sputnik_di#mocking-dependencies-with-overridewith

Если у тебя будут еще какие-нибудь вопросы или пожелания, можешь писать мне. Мои контакты есть в профиле. Спасибо.

Добра и любви)

Тут очень просто все мокать. Достаточно создать интерфейс для необходимой зависимости

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(),
    )
  );
}

Спасибо за вопрос!

ага, но концепция DI и Service Locator остаются неизменными. В Spring скорее всего тоже уже поменялся механизм

Information

Rating
Does not participate
Registered
Activity