Attach RCTModuleRegistry to TurboModules

Summary: Changelog: [Internal]

Reviewed By: PeteTheHeat

Differential Revision: D25414882

fbshipit-source-id: 9e45ffb86cf69a2d1921b7ff1c713c186a8c4e01
This commit is contained in:
Ramanpreet Nara 2020-12-10 20:21:11 -08:00 коммит произвёл Facebook GitHub Bot
Родитель 6f02942dc1
Коммит 5b0957962a
1 изменённых файлов: 24 добавлений и 0 удалений

Просмотреть файл

@ -172,6 +172,8 @@ static Class getFallbackClassFromName(const char *name)
std::shared_timed_mutex _turboModuleHoldersSharedMutex;
std::mutex _turboModuleHoldersMutex;
std::atomic<bool> _invalidating;
RCTModuleRegistry *_moduleRegistry;
}
- (instancetype)initWithBridge:(RCTBridge *)bridge
@ -183,6 +185,9 @@ static Class getFallbackClassFromName(const char *name)
_delegate = delegate;
_bridge = bridge;
_invalidating = false;
_moduleRegistry = [RCTModuleRegistry new];
[_moduleRegistry setBridge:bridge];
[_moduleRegistry setTurboModuleRegistry:self];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(bridgeWillInvalidateModules:)
@ -535,6 +540,25 @@ static Class getFallbackClassFromName(const char *name)
}
}
/**
* Attach the RCTModuleRegistry to this TurboModule, which allows this TurboModule
* To load other NativeModules & TurboModules.
*
* Usage: In the NativeModule @implementation, include:
* `@synthesize moduleRegistry = _moduleRegistry`
*/
if ([module respondsToSelector:@selector(moduleRegistry)] && _moduleRegistry) {
@try {
[(id)module setValue:_moduleRegistry forKey:@"moduleRegistry"];
} @catch (NSException *exception) {
RCTLogError(
@"%@ has no setter or ivar for its module registry, which is not "
"permitted. You must either @synthesize the moduleRegistry property, "
"or provide your own setter method.",
RCTBridgeModuleNameForClass([module class]));
}
}
/**
* Some modules need their own queues, but don't provide any, so we need to create it for them.
* These modules typically have the following: