public static void AddAttributedModules(this IReactPackageBuilder packageBuilder)
 {
     foreach (var attributedModule in m_attributedModules.Value)
     {
         attributedModule.Value.AddToPackageBuilder(packageBuilder);
     }
 }
        /// <summary>
        /// Helper extension method to register a reflection
        /// </summary>
        /// <typeparam name="T">This must be thea type defined in the assembly where the items for the react package should be extracted.</typeparam>
        /// <remarks>
        /// The common use case of this type is when you have a react library. Then you would call this from the <see cref="IReactPackageBuilder.CreatePackage"/> function in ReactPackageProvider class that implements <see cref="IReactPackageProvider"/> like: <c>
        /// public sealed class ReactPackageProvider : IReactPackageProvider
        /// {
        ///     public void CreatePackage(IReactPackageBuilder packageBuilder)
        ///     {
        ///         packageBuilder.AddReflectionReactPackageProvider<ReactPackageProvider>();
        ///     }
        /// }
        /// </c>.
        /// </remarks>
        public static void AddReflectionReactPackageProvider <T>(this IReactPackageBuilder packageBuilder)
        {
            var assembly = typeof(T).Assembly;

            packageBuilder.AddAttributedModules(assembly);
            packageBuilder.AddViewManagers(assembly);
            JSValueReaderGenerator.RegisterAssembly(assembly);
            JSValueWriterGenerator.RegisterAssembly(assembly);
        }
        /// <summary>
        /// This method registered the attributed models for the given assembly via reflection to the package builder.
        /// </summary>
        public static void AddAttributedModules(this IReactPackageBuilder packageBuilder, Assembly assembly)
        {
            var attributedModules = s_registeredAssemblies.GetOrAdd(assembly, asm => new Lazy <Dictionary <string, AttributedModule> >(() => InitAttributedModules(asm)));

            foreach (var attributedModule in attributedModules.Value.Values)
            {
                attributedModule.AddToPackageBuilder(packageBuilder);
            }
        }
        public static bool TryAddAttributedModule(this IReactPackageBuilder packageBuilder, string moduleName)
        {
            if (m_attributedModules.Value.TryGetValue(moduleName, out var attributedModule))
            {
                attributedModule.AddToPackageBuilder(packageBuilder);
                return(true);
            }

            return(false);
        }
 internal static void AddViewManagers(this IReactPackageBuilder packageBuilder)
 {
     foreach (var typeInfo in typeof(ReactPackageBuilderExtensions).GetTypeInfo().Assembly.DefinedTypes)
     {
         if (!typeInfo.IsAbstract && typeInfo.ImplementedInterfaces.Contains(typeof(IViewManager)))
         {
             packageBuilder.AddViewManager(typeInfo.Name, () => (IViewManager)Activator.CreateInstance(typeInfo.AsType()));
         }
     }
 }
 internal static void AddAttributedModules(this IReactPackageBuilder packageBuilder)
 {
     foreach (var type in typeof(ReactPackageBuilderExtensions).GetTypeInfo().Assembly.GetTypes())
     {
         var moduleAttribute = type.GetTypeInfo().GetCustomAttribute <ReactModuleAttribute>();
         if (moduleAttribute != null)
         {
             ReactModuleInfo moduleInfo = ReactModuleInfo.GetOrAddModuleInfo(type, moduleAttribute);
             packageBuilder.AddModule(moduleInfo.ModuleName, moduleInfo.ModuleProvider);
         }
     }
 }
        public static bool TryAddAttributedModule(this IReactPackageBuilder packageBuilder, string moduleName)
        {
            if (s_registeredAssemblies.TryGetValue(s_currentAssembly, out var attributedModules))
            {
                if (attributedModules.Value.TryGetValue(moduleName, out var attributedModule))
                {
                    attributedModule.AddToPackageBuilder(packageBuilder);
                    return(true);
                }
            }

            return(false);
        }
 internal static void AddViewManagers(this IReactPackageBuilder packageBuilder)
 {
     foreach (var typeInfo in typeof(ReactPackageBuilderExtensions).GetTypeInfo().Assembly.DefinedTypes)
     {
         if (!typeInfo.IsAbstract && typeInfo.ImplementedInterfaces.Contains(typeof(IViewManager)))
         {
             if (typeInfo.DeclaredConstructors.Any(cInfo => cInfo.GetParameters().Length == 1 && cInfo.GetParameters()[0].ParameterType == typeof(IReactContext)))
             {
                 packageBuilder.AddViewManager(typeInfo.Name, (reactContext) => (IViewManager)Activator.CreateInstance(typeInfo.AsType(), reactContext));
             }
             else if (typeInfo.DeclaredConstructors.Any(cInfo => cInfo.GetParameters().Length == 0))
             {
                 packageBuilder.AddViewManager(typeInfo.Name, (reactContext) => (IViewManager)Activator.CreateInstance(typeInfo.AsType()));
             }
         }
     }
 }
Example #9
0
 public void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     packageBuilder.AddReflectionReactPackageProvider <ReactPackageProvider>();
 }
 public void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     packageBuilder.AddAttributedModules();
 }
        public void CreatePackage(IReactPackageBuilder packageBuilder)
        {
            packageBuilder.AddViewManagers();

            Console.WriteLine("VIEWIE");
        }
 public void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     packageBuilder.AddViewManager("LottieAnimationView", () => {
         return(new LottieAnimationViewManager());
     });
 }
Example #13
0
 public void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     CreatePackageImplementation(packageBuilder);
     packageBuilder.AddAttributedModules();
 }
 public virtual void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     ReflectionReactPackageProviderExtensions.AddReflectionReactPackageProvider <T>(packageBuilder);
 }
 /// <summary>
 /// Adds the view manages in the given assembly via reflection to the package builder.
 /// </summary>
 /// <remarks>
 /// This method will be obsolete soon. It should only be called by existing generated project that still use the `Microsoft.ReactNative.SharedManaged` project
 /// where s_currentAssembly will reflect the users assembly that compiles this code as well.
 /// </remarks>
 public static void AddViewManagers(this IReactPackageBuilder packageBuilder)
 {
     AddViewManagers(packageBuilder, s_currentAssembly);
 }
 /// <summary>
 /// This method is implemented by the C# code generator
 /// </summary>
 partial void CreatePackageImplementation(IReactPackageBuilder packageBuilder);
 /// <summary>
 /// Adds the attributed models for the current assembly via reflection to the package builder.
 /// </summary>
 /// <remarks>
 /// This method will be obsolete soon. It should only be called by existing generated project that still use the `Microsoft.ReactNative.SharedManaged` project
 /// where s_currentAssembly will reflect the users assembly that compiles this code as well.
 /// </remarks>
 public static void AddAttributedModules(this IReactPackageBuilder packageBuilder)
 {
     AddAttributedModules(packageBuilder, s_currentAssembly);
 }
            public void AddToPackageBuilder(IReactPackageBuilder packageBuilder)
            {
                ReactModuleInfo moduleInfo = ReactModuleInfo.GetOrAddModuleInfo(ModuleType, ModuleAttribute);

                packageBuilder.AddModule(moduleInfo.ModuleName, moduleInfo.ModuleProvider);
            }
 public void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     CreatePackageImplementation(packageBuilder);
 }
Example #20
0
 public void CreatePackage(IReactPackageBuilder packageBuilder)
 {
     packageBuilder.AddViewManagers();
 }