aspnetcore/src/Microsoft.AspNet.Mvc/MvcServices.cs

77 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using Microsoft.AspNet.ConfigurationModel;
using Microsoft.AspNet.DependencyInjection;
using Microsoft.AspNet.DependencyInjection.NestedProviders;
using Microsoft.AspNet.FileSystems;
using Microsoft.AspNet.Mvc.Filters;
using Microsoft.AspNet.Mvc.ModelBinding;
using Microsoft.AspNet.Mvc.Razor;
using Microsoft.Net.Runtime;
namespace Microsoft.AspNet.Mvc
{
public class MvcServices
{
public static IEnumerable<IServiceDescriptor> GetDefaultServices(IConfiguration configuration,
IApplicationEnvironment env)
{
var describe = new ServiceDescriber(configuration);
yield return describe.Transient<IControllerFactory, DefaultControllerFactory>();
yield return describe.Transient<IControllerDescriptorFactory, DefaultControllerDescriptorFactory>();
yield return describe.Transient<IActionSelector, DefaultActionSelector>();
yield return describe.Transient<IActionInvokerFactory, ActionInvokerFactory>();
yield return describe.Transient<IActionResultHelper, ActionResultHelper>();
yield return describe.Transient<IActionResultFactory, ActionResultFactory>();
yield return describe.Transient<IParameterDescriptorFactory, DefaultParameterDescriptorFactory>();
yield return describe.Transient<IControllerAssemblyProvider, AppDomainControllerAssemblyProvider>();
yield return describe.Transient<IActionDiscoveryConventions, DefaultActionDiscoveryConventions>();
yield return describe.Instance<IFileSystem>(new PhysicalFileSystem(env.ApplicationBasePath));
yield return describe.Instance<IMvcRazorHost>(new MvcRazorHost(typeof(RazorView).FullName));
#if NET45
// TODO: Container chaining to flow services from the host to this container
yield return describe.Transient<ICompilationService, CscBasedCompilationService>();
// TODO: Make this work like normal when we get container chaining
// TODO: Update this when we have the new host services
// yield return describe.Instance<ICompilationService>(new RoslynCompilationService(hostServiceProvider));
#endif
yield return describe.Transient<IRazorCompilationService, RazorCompilationService>();
yield return describe.Transient<IVirtualPathViewFactory, VirtualPathViewFactory>();
yield return describe.Transient<IViewEngine, RazorViewEngine>();
// This is temporary until DI has some magic for it
yield return describe.Transient<INestedProviderManager<ActionDescriptorProviderContext>,
NestedProviderManager<ActionDescriptorProviderContext>>();
yield return describe.Transient<INestedProviderManager<ActionInvokerProviderContext>,
NestedProviderManager<ActionInvokerProviderContext>>();
yield return describe.Transient<INestedProvider<ActionDescriptorProviderContext>,
ReflectedActionDescriptorProvider>();
yield return describe.Transient<INestedProvider<ActionInvokerProviderContext>,
ReflectedActionInvokerProvider>();
yield return describe.Transient<IModelMetadataProvider, DataAnnotationsModelMetadataProvider>();
yield return describe.Transient<IActionBindingContextProvider, DefaultActionBindingContextProvider>();
yield return describe.Transient<IValueProviderFactory, RouteValueValueProviderFactory>();
yield return describe.Transient<IValueProviderFactory, QueryStringValueProviderFactory>();
yield return describe.Transient<IValueProviderFactory, FormValueProviderFactory>();
yield return describe.Transient<IModelBinder, TypeConverterModelBinder>();
yield return describe.Transient<IModelBinder, TypeMatchModelBinder>();
yield return describe.Transient<IModelBinder, GenericModelBinder>();
yield return describe.Transient<IModelBinder, MutableObjectModelBinder>();
yield return describe.Transient<IModelBinder, ComplexModelDtoModelBinder>();
yield return describe.Transient<INestedProviderManager<FilterProviderContext>, NestedProviderManager<FilterProviderContext>>();
yield return describe.Transient<INestedProvider<FilterProviderContext>, DefaultFilterProvider>();
yield return describe.Transient<IInputFormatter, JsonInputFormatter>();
}
}
}