public static IMvcBuilder AddModularityApplicationParts(this IMvcBuilder mvcBuilder)
        {
            var modularity = ModularityBuilder.Get();

            foreach (var area in modularity.Areas)
            {
                foreach (ModularityModule module in area.Modules)
                {
                    var partFactory = ApplicationPartFactory.GetApplicationPartFactory(module.Assembly);
                    foreach (var part in partFactory.GetApplicationParts(module.Assembly))
                    {
                        mvcBuilder.PartManager.ApplicationParts.Add(part);
                    }

                    var relatedAssemblies = RelatedAssemblyAttribute.GetRelatedAssemblies(module.Assembly, throwOnError: false);
                    foreach (var relatedAssembly in relatedAssemblies)
                    {
                        partFactory = ApplicationPartFactory.GetApplicationPartFactory(relatedAssembly);
                        foreach (var part in partFactory.GetApplicationParts(relatedAssembly))
                        {
                            mvcBuilder.PartManager.ApplicationParts.Add(part);
                        }
                    }
                }
            }

            return(mvcBuilder);
        }
        public static IServiceCollection AddModularityConfigureServices(this IServiceCollection services)
        {
            var startupsTempory = new List <IModularityStartup>();
            var modularity      = ModularityBuilder.Get();

            foreach (var area in modularity.Areas)
            {
                foreach (var module in area.Modules)
                {
                    var startupType = module.Assembly.GetTypes()
                                      .FirstOrDefault(t => typeof(IModularityStartup).IsAssignableFrom(t));

                    if ((startupType != null) && (startupType != typeof(IModularityStartup)))
                    {
                        var startupInstance = (IModularityStartup)Activator.CreateInstance(startupType);
                        startupsTempory.Add(startupInstance);
                    }
                }
            }

            var startups = startupsTempory.OrderBy(s => s.Order).ToList();

            foreach (var startup in startups)
            {
                services.AddSingleton(typeof(IModularityStartup), startup);
                startup.ConfigureServices(services);
            }

            return(services);
        }
Exemple #3
0
        public static void UseModularityStaticFiles(this IApplicationBuilder app, string requestPath = "/wwwroot")
        {
            if (String.IsNullOrWhiteSpace(requestPath))
            {
                throw new ArgumentNullException("Request Path");
            }

            var modularity = ModularityBuilder.Get();

            if (modularity.Areas.Count > 0)
            {
                var env = app.ApplicationServices.GetRequiredService <IWebHostEnvironment>();

                foreach (var area in modularity.Areas)
                {
                    foreach (var module in area.Modules)
                    {
                        if (env.IsDevelopment())
                        {
                            app.UseStaticFiles(new StaticFileOptions()
                            {
                                FileProvider = new EmbeddedFileProvider(module.Assembly, module.Assembly.GetName().Name + ".wwwroot"),
                                RequestPath  = new PathString(requestPath),
                                //??bu compress olayı problem oluşturabilir kontrol edeceğiz
                                HttpsCompression  = Microsoft.AspNetCore.Http.Features.HttpsCompressionMode.Compress,
                                OnPrepareResponse = (context) =>
                                {
                                    var headers          = context.Context.Response.GetTypedHeaders();
                                    headers.CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue
                                    {
                                        NoCache = true,
                                        NoStore = true,
                                        MaxAge  = TimeSpan.FromDays(-1)
                                    };
                                }
                            });
                        }
                        else
                        {
                            app.UseStaticFiles(new StaticFileOptions()
                            {
                                FileProvider      = new EmbeddedFileProvider(module.Assembly, module.Assembly.GetName().Name + ".wwwroot"),
                                RequestPath       = new PathString(requestPath),
                                HttpsCompression  = Microsoft.AspNetCore.Http.Features.HttpsCompressionMode.Compress,
                                OnPrepareResponse = (context) =>
                                {
                                    var headers          = context.Context.Response.GetTypedHeaders();
                                    headers.CacheControl = new Microsoft.Net.Http.Headers.CacheControlHeaderValue
                                    {
                                        Public = true,
                                        MaxAge = TimeSpan.FromDays(30)
                                    };
                                }
                            });
                        }
                    }
                }
            }
        }
Exemple #4
0
        public static void UseModularityInfoEndpoints(this IEndpointRouteBuilder endpoints)
        {
            endpoints.MapGet("/apiks/modularity", async context =>
            {
                var modularity = ModularityBuilder.Get();

                var settings = new JsonSerializerSettings
                {
                    ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
                };

                var data = JsonConvert.SerializeObject(modularity, Formatting.Indented, settings);

                await context.Response.WriteAsync(data);
            });
        }
        public static IServiceCollection AddModularityConventions(this IServiceCollection services)
        {
            services.Configure <MvcOptions>(options =>
            {
                var modularity = ModularityBuilder.Get();

                if (modularity == null)
                {
                    throw new Exception("Modularity is null in AddMvc Options");
                }

                options.Conventions.Add(new ModularityRoutePrefixConvention(modularity));
                options.Conventions.Add(new ModularityAuthorizeByDefaultConvention(modularity));
            });

            return(services);
        }
        public static IServiceCollection AddModularityEmbeddedFileProviders(this IServiceCollection services)
        {
            var modularity = ModularityBuilder.Get();

            services.Configure <MvcRazorRuntimeCompilationOptions>(options =>
            {
                foreach (var area in modularity.Areas)
                {
                    foreach (ModularityModule module in area.Modules)
                    {
                        options.FileProviders.Add(new EmbeddedFileProvider(module.Assembly));
                    }
                }
            });

            return(services);
        }
        public static IMvcBuilder AddModularityRazorRuntimeCompilation(this IMvcBuilder mvcBuilder, bool isDevelopment)
        {
            if (isDevelopment)
            {
                mvcBuilder.AddRazorRuntimeCompilation(options =>
                {
                    var modularity = ModularityBuilder.Get();

                    foreach (var area in modularity.Areas)
                    {
                        foreach (ModularityModule module in area.Modules)
                        {
                            options.FileProviders.Add(new PhysicalFileProvider(module.PhysicalFileDirectory));
                        }
                    }
                });
            }

            return(mvcBuilder);
        }