Example #1
0
        protected override void PerformAction(XRSubreport control)
        {
            var ds = RunTimeHelper.SetDataSourceOnSubreport(control);

            if (_nestedAction != null)
            {
                _nestedAction(control, ds);
            }
        }
Example #2
0
        /// <summary>
        /// 程序集依赖注入
        /// </summary>
        /// <param name="services"></param>
        /// <param name="assemblyName">程序集名</param>
        public static void AddAssembly(this IServiceCollection services, string assemblyName, ServiceLifetime serviceLifetime = ServiceLifetime.Scoped)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services) + "为空!");
            }
            if (string.IsNullOrEmpty(assemblyName))
            {
                throw new ArgumentNullException(nameof(assemblyName) + "为空!");
            }
            var assembly = RunTimeHelper.GetAssemblyByName(assemblyName);

            if (assembly == null)
            {
                throw new DllNotFoundException(nameof(assembly) + "不存在!");
            }
            var types = assembly.GetTypes();
            var list  = types.Where(o => o.IsClass && !o.IsAbstract && !o.IsGenericType).ToList();

            if (list == null && !list.Any())
            {
                return;
            }
            foreach (var item in list)
            {
                var interfaceList = item.GetInterfaces();
                if (interfaceList == null || !interfaceList.Any())
                {
                    continue;
                }
                var inter = interfaceList.FirstOrDefault();
                switch (serviceLifetime)
                {
                case ServiceLifetime.Singleton:
                    services.AddSingleton(inter, item);
                    break;

                case ServiceLifetime.Scoped:
                    services.AddScoped(inter, item);
                    break;

                case ServiceLifetime.Transient:
                    services.AddTransient(inter, item);
                    break;
                }
            }
        }
        // Main Loop
        private void Visit(XRControl control)
        {
            // Set Root Hashcode On SubReport Here:
            control.TryAs <XRSubreport>(sr => RunTimeHelper.SetRootHashCodeOnSubreport(sr));

            // Self
            PublishScopedMessage(control);

            // Get Children
            var children = VisitChildren(control);

            // Recursion
            foreach (var child in children)
            {
                //Visit(child);
                AttachToControl(child);
            }
        }
Example #4
0
        /// <summary>
        /// 通过反射程序集注入
        /// </summary>
        /// <param name="services"></param>
        public static void AddAssembly(this IServiceCollection services, string assemblyName, ServiceLifetime serviceLifetime = ServiceLifetime.Scoped)
        {
            if (services == null)
            {
                throw new ArgumentNullException(nameof(services) + "为空");
            }
            if (assemblyName == null)
            {
                throw new ArgumentNullException(nameof(assemblyName) + "为空");
            }
            var assembly = RunTimeHelper.GetAssemblyName(assemblyName);

            if (assembly == null)
            {
                throw new DllNotFoundException(nameof(assembly) + "为空");
            }
            var types = assembly.GetTypes();
            var list  = types.Where(t => t.IsClass && !t.IsAbstract && !t.IsGenericType).ToList();

            foreach (var type in list)
            {
                var interfaceList = type.GetInterfaces();
                if (interfaceList.Any())
                {
                    var inter = interfaceList.First();
                    switch (serviceLifetime)
                    {
                    case ServiceLifetime.Scoped:
                        services.AddScoped(inter, type);
                        break;

                    case ServiceLifetime.Singleton:
                        services.AddSingleton(inter, type);
                        break;

                    case ServiceLifetime.Transient:
                        services.AddTransient(inter, type);
                        break;
                    }
                }
            }
        }