예제 #1
0
        protected virtual void InitializeServices(IServiceCollection services)
        {
            var libraryManager = PlatformServices.Default.LibraryManager;

            // When an application executes in a regular context, the application base path points to the root
            // directory where the application is located, for example .../samples/MvcSample.Web. However, when
            // executing an application as part of a test, the ApplicationBasePath of the IApplicationEnvironment
            // points to the root folder of the test project.
            // To compensate, we need to calculate the correct project path and override the application
            // environment value so that components like the view engine work properly in the context of the test.
            var startupAssembly = typeof(TStartup).GetTypeInfo().Assembly;
            var applicationName = startupAssembly.GetName().Name;
            var library         = libraryManager.GetLibrary(applicationName);
            var applicationRoot = Path.GetDirectoryName(library.Path);

            var applicationEnvironment = PlatformServices.Default.Application;

            services.AddSingleton <IApplicationEnvironment>(
                new TestApplicationEnvironment(applicationEnvironment, applicationName, applicationRoot));

            // Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd().
            var assemblyProvider = new StaticAssemblyProvider();

            assemblyProvider.CandidateAssemblies.Add(startupAssembly);
            services.AddSingleton <IAssemblyProvider>(assemblyProvider);
            services.AddSingleton <ILoggerFactory>(NullLoggerFactory.Instance);
        }
예제 #2
0
        public Func <IServiceCollection, IServiceProvider> InitializeServices(Assembly startupAssembly, Func <IServiceCollection, IServiceProvider> buildServices)
        {
            var applicationName = startupAssembly.GetName().Name;
            var applicationRoot = GetApplicationRoot(applicationName);

#if DNX451
            AppDomain.CurrentDomain.SetData("APP_CONTEXT_BASE_DIRECTORY", applicationRoot);
#endif
            var applicationEnvironment = PlatformServices.Default.Application;

            var hostingEnvironment = new HostingEnvironment();
            hostingEnvironment.Initialize(applicationRoot, null);

            var assemblyProvider = new StaticAssemblyProvider();
            assemblyProvider.CandidateAssemblies.Add(startupAssembly);

            return(services =>
            {
                services.AddInstance <IApplicationEnvironment>(new TestApplicationEnvironment(applicationEnvironment, applicationName, applicationRoot));
                services.AddInstance <IHostingEnvironment>(hostingEnvironment);
                // Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd().
                services.AddInstance <IAssemblyProvider>(assemblyProvider);

                return buildServices(services);
            });
        }
예제 #3
0
        private ControllerActionDescriptorProvider CreateProvider()
        {
            var assemblyProvider = new StaticAssemblyProvider();

            assemblyProvider.CandidateAssemblies.Add(GetType().GetTypeInfo().Assembly);
            var controllerTypeProvider = new NamespaceFilteredControllerTypeProvider(assemblyProvider);

            var options = new MvcOptions();

            var setup = new WebApiCompatShimOptionsSetup();

            setup.Configure(options);

            var optionsAccessor = new Mock <IOptions <MvcOptions> >();

            optionsAccessor
            .SetupGet(o => o.Value)
            .Returns(options);

            var authorizationOptionsAccessor = new Mock <IOptions <AuthorizationOptions> >();

            authorizationOptionsAccessor
            .SetupGet(o => o.Value)
            .Returns(new AuthorizationOptions());

            var modelProvider = new DefaultApplicationModelProvider(optionsAccessor.Object);

            var provider = new ControllerActionDescriptorProvider(
                controllerTypeProvider,
                new[] { modelProvider },
                optionsAccessor.Object);

            return(provider);
        }
예제 #4
0
        public static WebHostBuilder UseProjectOf <TStartup>(this WebHostBuilder builder)
        {
            var libraryManager = DnxPlatformServices.Default.LibraryManager;

            var applicationName = typeof(TStartup).GetTypeInfo().Assembly.GetName().Name;
            var library         = libraryManager.GetLibrary(applicationName);
            var webRoot         = Path.GetDirectoryName(library.Path);

            var assemblyProvider = new StaticAssemblyProvider();

            assemblyProvider.CandidateAssemblies.Add(typeof(TStartup).Assembly);
            builder.ConfigureServices(services =>
            {
                var applicationEnvironment = new TestApplicationEnvironment(
                    PlatformServices.Default.Application,
                    applicationName,
                    webRoot);
                services.AddSingleton <IApplicationEnvironment>(applicationEnvironment);

                var hostingEnvironment = new HostingEnvironment();
                hostingEnvironment.Initialize(
                    webRoot,
                    new WebHostOptions
                {
                    Environment = "Production",
                },
                    configuration: null);
                services.AddSingleton <IHostingEnvironment>(hostingEnvironment);

                services.AddSingleton <IAssemblyProvider>(assemblyProvider);
            });

            return(builder);
        }
예제 #5
0
        public void ConfigureServices(IServiceCollection services)
        {
            // We need to disable register an empty exporter so that we can add references
            // This will go away eventually see
            services.AddSingleton <ILibraryExporter, NullExporter>();

            // ILibraryManager isn't available yet so we need to explicitly add the assemblies
            // that we want to find controllers in.
            var assemblyProvider = new StaticAssemblyProvider();

            assemblyProvider.CandidateAssemblies.Add(typeof(Startup).GetTypeInfo().Assembly);
            services.AddSingleton <IAssemblyProvider>(assemblyProvider);

            services.AddMvc()
            .AddRazorOptions(options =>
            {
                options.CompilationCallback = c =>
                {
                    var refs = ResolveCompilationReferences();

                    c.Compilation = c.Compilation
                                    .AddReferences(refs)
                    ;
                };
            });
        }
예제 #6
0
            private static IAssemblyProvider GetAssemblyProvider()
            {
                var assemblyProvider = new StaticAssemblyProvider();
                assemblyProvider.CandidateAssemblies.Add(
                    typeof(FilteredViewComponentSelector).GetTypeInfo().Assembly);

                return assemblyProvider;
            }
            private static IAssemblyProvider GetAssemblyProvider()
            {
                var assemblyProvider = new StaticAssemblyProvider();

                assemblyProvider.CandidateAssemblies.Add(
                    typeof(ViewComponentContainer).GetTypeInfo().Assembly);

                return(assemblyProvider);
            }
예제 #8
0
        protected virtual void InitializeServices(IServiceCollection services)
        {
            var startupAssembly = typeof(TStartup).GetTypeInfo().Assembly;

            // Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd().
            var assemblyProvider = new StaticAssemblyProvider();

            assemblyProvider.CandidateAssemblies.Add(startupAssembly);
            services.AddSingleton <IAssemblyProvider>(assemblyProvider);
        }
예제 #9
0
        public static void AddControllersAsServices(IServiceCollection services, IEnumerable <Assembly> assemblies)
        {
            var assemblyProvider = new StaticAssemblyProvider();

            foreach (var assembly in assemblies)
            {
                assemblyProvider.CandidateAssemblies.Add(assembly);
            }

            var controllerTypeProvider = new DefaultControllerTypeProvider(assemblyProvider);
            var controllerTypes        = controllerTypeProvider.ControllerTypes;

            AddControllersAsServices(services, controllerTypes.Select(type => type.AsType()));
        }
예제 #10
0
        private static IAssemblyProvider CreateAssemblyProvider(string siteName)
        {
            // Creates a service type that will limit MVC to only the controllers in the test site.
            // We only want this to happen when running in-process.
            var assembly = Assembly.Load(new AssemblyName(siteName));
            var provider = new StaticAssemblyProvider
            {
                CandidateAssemblies =
                {
                    assembly,
                },
            };

            return(provider);
        }
        /// Override the default AddMvc since we need to do some fix up for the CLI
        // This is temporary as more things come online
        public static IMvcBuilder AddMvc2(this IServiceCollection services)
        {
            // We need to disable register an empty exporter so that we can add references
            // https://github.com/aspnet/Mvc/issues/3633
            services.AddSingleton <ILibraryExporter, NullExporter>();

            // ILibraryManager isn't available yet so we need to explicitly add the assemblies
            // that we want to find controllers in.

            // This will be replaced with the dependency context.
            var assemblyProvider = new StaticAssemblyProvider();

            assemblyProvider.CandidateAssemblies.Add(typeof(Startup).GetTypeInfo().Assembly);
            services.AddSingleton <IAssemblyProvider>(assemblyProvider);

            // Override the options and add references
            services.AddScoped <IConfigureOptions <RazorViewEngineOptions>, MvcCompilationOptions>();

            return(services.AddMvc());
        }
예제 #12
0
        private Func <IServiceCollection, IServiceProvider> InitializeServices(
            Assembly startupAssembly,
            Func <IServiceCollection, IServiceProvider> buildServices)
        {
            var applicationServices = CallContextServiceLocator.Locator.ServiceProvider;
            var libraryManager      = applicationServices.GetRequiredService <ILibraryManager>();

            // When an application executes in a regular context, the application base path points to the root
            // directory where the application is located, for example .../samples/MvcSample.Web. However, when
            // executing an application as part of a test, the ApplicationBasePath of the IApplicationEnvironment
            // points to the root folder of the test project.
            // To compensate, we need to calculate the correct project path and override the application
            // environment value so that components like the view engine work properly in the context of the test.
            var applicationName = startupAssembly.GetName().Name;
            var library         = libraryManager.GetLibrary(applicationName);
            var applicationRoot = Path.GetDirectoryName(library.Path);

            var applicationEnvironment = applicationServices.GetRequiredService <IApplicationEnvironment>();

            return((services) =>
            {
                services.AddInstance <IApplicationEnvironment>(
                    new TestApplicationEnvironment(applicationEnvironment, applicationName, applicationRoot));

                var hostingEnvironment = new HostingEnvironment();
                hostingEnvironment.Initialize(applicationRoot, null);
                services.AddInstance <IHostingEnvironment>(hostingEnvironment);

                // Inject a custom assembly provider. Overrides AddMvc() because that uses TryAdd().
                var assemblyProvider = new StaticAssemblyProvider();
                assemblyProvider.CandidateAssemblies.Add(startupAssembly);
                services.AddInstance <IAssemblyProvider>(assemblyProvider);

                AddAdditionalServices(services);

                return buildServices(services);
            });
        }
예제 #13
0
        private static DefaultControllerTypeProvider GetControllerTypeProvider()
        {
            var assemblyProvider = new StaticAssemblyProvider();

            return(new DefaultControllerTypeProvider(assemblyProvider));
        }