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); }
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); }); }
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); }
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); }
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) ; }; }); }
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); }
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); }
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())); }
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()); }
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); }); }
private static DefaultControllerTypeProvider GetControllerTypeProvider() { var assemblyProvider = new StaticAssemblyProvider(); return(new DefaultControllerTypeProvider(assemblyProvider)); }