Flutter - 如何在使用 GetX 注册到 Get.put 后使用 Get.find 检索已实现的 class?
Flutter - How to retrieve an implemented class with Get.find after registered with Get.put using GetX?
我有一个名为 GetConnectApiHelper 的 class 实现了一个名为 IApiHelper 的抽象,我需要在 Bindings 中使用 Get.put 注册这个 class 并在抽象变量中检索实现但是当我尝试这样做,但收到有关“抽象未注册”的错误消息。
我如何才能正确注入依赖项,以便在我需要用 http、dio 等替换时轻松更改...(干净的架构)
abstract class IApiHelper {}
class GetConnectApiHelper extends GetxService implements IApiHelper {}
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put(GetConnectApiHelper());
Get.put(SignInController());
}
}
class SignInController extends GetxController {
final IApiHelper apiHelper = Get.find(); // This throws the exception
}
======== Exception caught by widgets library =======================================================
The following message was thrown building Builder(dirty):
"IApiHelper" not found. You need to call "Get.put(IApiHelper())" or "Get.lazyPut(()=>IApiHelper())"
GetX 根据其确切类型查找其依赖项,因此您需要使用 Get.find<GetConnectApiHelper>()
更新:
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put(GetConnectApiHelper());
Get.put(SignInController<GetConnectApiHelper>());
}
}
class SignInController<T extends IApiHelper> extends GetxController {
final IApiHelper apiHelper = Get.find<T>();
}
我找到了解决办法。我可以将接口设置为类型,然后注册我想要检索的实现。
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put<IApiHelper>(GetConnectApiHelper());
Get.put(SignInController());
}
}
class SignInController extends GetxController {
final IApiHelper apiHelper = Get.find();
}
print(apiHelper.runtimeType); // it prints Instance of 'GetConnectApiHelper'
或者我可以注入实现。
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put<IApiHelper>(GetConnectApiHelper());
Get.put(SignInController(apiHelper: Get.find()));
}
}
class SignInController extends GetxController {
final IApiHelper apiHelper;
SignInController({required this.apiHelper})
}
我有一个名为 GetConnectApiHelper 的 class 实现了一个名为 IApiHelper 的抽象,我需要在 Bindings 中使用 Get.put 注册这个 class 并在抽象变量中检索实现但是当我尝试这样做,但收到有关“抽象未注册”的错误消息。
我如何才能正确注入依赖项,以便在我需要用 http、dio 等替换时轻松更改...(干净的架构)
abstract class IApiHelper {}
class GetConnectApiHelper extends GetxService implements IApiHelper {}
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put(GetConnectApiHelper());
Get.put(SignInController());
}
}
class SignInController extends GetxController {
final IApiHelper apiHelper = Get.find(); // This throws the exception
}
======== Exception caught by widgets library =======================================================
The following message was thrown building Builder(dirty):
"IApiHelper" not found. You need to call "Get.put(IApiHelper())" or "Get.lazyPut(()=>IApiHelper())"
GetX 根据其确切类型查找其依赖项,因此您需要使用 Get.find<GetConnectApiHelper>()
更新:
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put(GetConnectApiHelper());
Get.put(SignInController<GetConnectApiHelper>());
}
}
class SignInController<T extends IApiHelper> extends GetxController {
final IApiHelper apiHelper = Get.find<T>();
}
我找到了解决办法。我可以将接口设置为类型,然后注册我想要检索的实现。
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put<IApiHelper>(GetConnectApiHelper());
Get.put(SignInController());
}
}
class SignInController extends GetxController {
final IApiHelper apiHelper = Get.find();
}
print(apiHelper.runtimeType); // it prints Instance of 'GetConnectApiHelper'
或者我可以注入实现。
class SignInBinding extends Bindings {
@override
void dependencies() {
Get.put<IApiHelper>(GetConnectApiHelper());
Get.put(SignInController(apiHelper: Get.find()));
}
}
class SignInController extends GetxController {
final IApiHelper apiHelper;
SignInController({required this.apiHelper})
}