private static void PrepareApplicationAndRouting(StartupMethods startupMethods) { var applicationBuilder = new ApplicationBuilderMock(serviceProvider); startupMethods?.ConfigureDelegate?.Invoke(applicationBuilder); AdditionalApplicationConfiguration?.Invoke(applicationBuilder); var routeBuilder = new RouteBuilder(applicationBuilder) { DefaultHandler = new RouteHandler(NullHandler) }; for (int i = 0; i < applicationBuilder.Routes.Count; i++) { var route = applicationBuilder.Routes[i]; routeBuilder.Routes.Add(route); } AdditionalRouting?.Invoke(routeBuilder); if (StartupType == null || routeBuilder.Routes.Count == 0) { routeBuilder.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); routeBuilder.Routes.Insert(0, AttributeRouting.CreateAttributeMegaRoute(serviceProvider)); } router = routeBuilder.Build(); }
private static void PrepareServices(IServiceCollection serviceCollection, StartupMethods startupMethods) { if (startupMethods?.ConfigureServicesDelegate != null) { startupMethods.ConfigureServicesDelegate(serviceCollection); } else { var defaultRegistrationPlugin = DefaultRegistrationPlugins .OrderByDescending(p => p.Priority) .FirstOrDefault(); if (defaultRegistrationPlugin != null) { defaultRegistrationPlugin.DefaultServiceRegistrationDelegate(serviceCollection); } else { serviceCollection.AddMvcCore(); } } AdditionalServices?.Invoke(serviceCollection); TryReplaceKnownServices(serviceCollection); PrepareRoutingServices(serviceCollection); #if NET451 var baseStartupType = StartupType; while (baseStartupType != null && baseStartupType?.BaseType != typeof(object)) { baseStartupType = baseStartupType.BaseType; } var applicationPartManager = (ApplicationPartManager)serviceCollection .FirstOrDefault(t => t.ServiceType == typeof(ApplicationPartManager)) ?.ImplementationInstance; if (applicationPartManager != null && baseStartupType != null) { applicationPartManager.ApplicationParts.Add(new AssemblyPart(baseStartupType.GetTypeInfo().Assembly)); } #endif serviceProvider = serviceCollection.BuildServiceProvider(); InitializationPlugins.ForEach(plugin => plugin.InitializationDelegate(serviceProvider)); }
public ConventionBasedStartup(StartupMethods methods) { _methods = methods; }
public ConventionBasedStartup(StartupMethods methods) { _methods = methods; }
private static void PrepareServices(IServiceCollection serviceCollection, StartupMethods startupMethods) { if (startupMethods?.ConfigureServicesDelegate != null) { startupMethods.ConfigureServicesDelegate(serviceCollection); } else { var defaultRegistrationPlugin = DefaultRegistrationPlugins .OrderByDescending(p => p.Priority) .FirstOrDefault(); if (defaultRegistrationPlugin != null) { defaultRegistrationPlugin.DefaultServiceRegistrationDelegate(serviceCollection); } else { serviceCollection .AddMvcCore() .AddFormatterMappings() .AddJsonFormatters(); } } AdditionalServices?.Invoke(serviceCollection); // custom MVC options serviceCollection.Configure<MvcOptions>(options => { // add controller conventions to save all valid controller types options.Conventions.Add(new ValidControllersCache()); // string input formatter helps with HTTP request processing var inputFormatters = options.InputFormatters.OfType<TextInputFormatter>(); if (!inputFormatters.Any(f => f.SupportedMediaTypes.Contains(ContentType.TextPlain))) { options.InputFormatters.Add(new StringInputFormatter()); } }); TryReplaceKnownServices(serviceCollection); PrepareRouteServices(serviceCollection); serviceProvider = serviceCollection.BuildServiceProvider(); // this call prepares all application conventions and fills the controller action descriptor cache serviceProvider.GetService<IControllerActionDescriptorCache>(); }