/// <summary> /// Gets an instance of a <see cref="IJavaScriptModule"/>. /// </summary> /// <typeparam name="T">Type of JavaScript module.</typeparam> /// <param name="instance">The React instance.</param> /// <returns>The JavaScript module instance.</returns> public T GetJavaScriptModule <T>(IReactInstance instance) where T : IJavaScriptModule, new() { lock (_moduleInstances) { if (!_moduleInstances.TryGetValue(typeof(T), out var moduleInstance)) { var type = typeof(T); moduleInstance = new T(); var invokeHandler = new JavaScriptModuleInvocationHandler(instance, type.Name); moduleInstance.InvocationHandler = invokeHandler; _moduleInstances.Add(type, moduleInstance); } return((T)moduleInstance); } }
/// <summary> /// Gets an instance of a <see cref="IJavaScriptModule"/>. /// </summary> /// <typeparam name="T">Type of JavaScript module.</typeparam> /// <param name="instance">The React instance.</param> /// <returns>The JavaScript module instance.</returns> public T GetJavaScriptModule <T>(IReactInstance instance) where T : IJavaScriptModule { lock (_moduleInstances) { var moduleInstance = default(IJavaScriptModule); if (!_moduleInstances.TryGetValue(typeof(T), out moduleInstance)) { var registration = default(JavaScriptModuleRegistration); if (!_moduleRegistrations.TryGetValue(typeof(T), out registration)) { throw new InvalidOperationException( Invariant($"JS module '{typeof(T)}' hasn't been registered.")); } var type = registration.ModuleInterface; moduleInstance = (IJavaScriptModule)Activator.CreateInstance(type); var invokeHandler = new JavaScriptModuleInvocationHandler(instance, registration); moduleInstance.InvocationHandler = invokeHandler; _moduleInstances.Add(type, moduleInstance); } return((T)moduleInstance); } }