public static IServiceCollection AddDynamicControllers(this IServiceCollection services,
                                                               IWebHostEnvironment env)
        {
            var change = new DynamicActionDescriptorChangeProvider();

            services.AddSingleton(change);
            services.AddSingleton <IActionDescriptorChangeProvider, DynamicActionDescriptorChangeProvider>(r =>
                                                                                                           r.GetRequiredService <DynamicActionDescriptorChangeProvider>());

            // FIXME: bad practice
            var sp = services.BuildServiceProvider();

            var mvc = services.AddControllersWithViews(x =>
            {
                x.Conventions.Add(new DynamicControllerModelConvention());
            });

            mvc.ConfigureApplicationPartManager(x =>
            {
                var logger   = sp.GetRequiredService <ILogger <DynamicControllerFeatureProvider> >();
                var ontology = sp.GetRequiredService <IOntologyLog>();
                var provider = new DynamicControllerFeatureProvider(ontology, logger);
                x.FeatureProviders.Add(provider);
            });

            if (env.IsDevelopment())
            {
                mvc.AddRazorRuntimeCompilation(o => { });
            }

            services.AddRazorPages();

            return(services);
        }
Beispiel #2
0
 public RebuildControllersWhenSchemaAdded(DynamicActionDescriptorChangeProvider changeProvider)
 {
     _changeProvider = changeProvider;
 }