protected override void PerformAction(XRSubreport control) { var ds = RunTimeHelper.SetDataSourceOnSubreport(control); if (_nestedAction != null) { _nestedAction(control, ds); } }
/// <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); } }
/// <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; } } } }