1

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

我在教程中遇到了下面的代码,我想知道为什么要注入接口但是当你可以直接注入它的实现时将它注册为它的实现?

登录块

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

  SignInBloc(this._authFacade) : super(SignInState.initial());

FIREBASEAUTH

@LazySingleton(as: IAuthFacade)
class FirebaseAuthFacade implements IAuthFacade {

注射配置

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

1 回答 1

1

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

例如,您可以将 GetIt 配置为根据接口是否为开发环境、生产环境、测试环境等使用不同的实现。您只需更改一行,它将随处更改。

于 2020-10-07T11:00:23.033 回答