Flutter 您应该注入接口还是它的实现?

Flutter 您应该注入接口还是它的实现?,flutter,dart,interface,bloc,injectable,Flutter,Dart,Interface,Bloc,Injectable,我应该注入接口还是它的实现? 我在一个教程中遇到了下面的代码,我想知道为什么可以直接注入接口的实现,而将其注册为实现 SIGNINBLOC @injectable class SignInBloc extends Bloc<SignInEvent, SignInState> { final IAuthFacade _authFacade; SignInBloc(this._authFacade) : super(SignInState.initial()); 注入配置 g

我应该注入接口还是它的实现?

我在一个教程中遇到了下面的代码,我想知道为什么可以直接注入接口的实现,而将其注册为实现

SIGNINBLOC

@injectable
class SignInBloc extends Bloc<SignInEvent, SignInState> {
  final IAuthFacade _authFacade;

  SignInBloc(this._authFacade) : super(SignInState.initial());
注入配置

gh.lazySingleton<IAuthFacade>(
      () => FirebaseAuthFacade(get<FirebaseAuth>(), get<GoogleSignIn>()));
gh.lazymingleton(
()=>FirebaseAuthFacade(get(),get());

您希望将实现细节和依赖项与特定实现分开。在不同的实现之间切换会更容易,在测试时模拟接口也会更容易

例如,您可以将GetIt配置为根据开发环境、生产环境、测试环境等情况对接口使用不同的实现。。你只需要换一行,它就会在任何地方改变

gh.lazySingleton<IAuthFacade>(
      () => FirebaseAuthFacade(get<FirebaseAuth>(), get<GoogleSignIn>()));