// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System.Collections.Generic; using Microsoft.AspNet.Mvc.Core; using Microsoft.AspNet.Mvc.Filters; using Microsoft.AspNet.Mvc.Internal; using Microsoft.AspNet.Mvc.ModelBinding; using Microsoft.AspNet.Mvc.OptionDescriptors; using Microsoft.AspNet.Mvc.Razor; using Microsoft.AspNet.Mvc.Razor.Compilation; using Microsoft.AspNet.Mvc.Rendering; using Microsoft.AspNet.Mvc.Routing; using Microsoft.AspNet.Security; using Microsoft.Framework.ConfigurationModel; using Microsoft.Framework.DependencyInjection; using Microsoft.Framework.DependencyInjection.NestedProviders; using Microsoft.Framework.OptionsModel; namespace Microsoft.AspNet.Mvc { public class MvcServices { public static IEnumerable GetDefaultServices() { return GetDefaultServices(new Configuration()); } public static IEnumerable GetDefaultServices(IConfiguration configuration) { var describe = new ServiceDescriber(configuration); yield return describe.Transient, MvcOptionsSetup>(); yield return describe.Transient(); yield return describe.Singleton(); yield return describe.Singleton(); yield return describe.Scoped(); yield return describe.Transient(); yield return describe.Transient(); yield return describe.Transient(); // The host is designed to be discarded after consumption and is very inexpensive to initialize. yield return describe.Transient(); yield return describe.Singleton(); yield return describe.Singleton(); yield return describe.Singleton(); yield return describe.Scoped(); yield return describe.Singleton(); yield return describe.Transient(); yield return describe.Singleton(); // Virtual path view factory needs to stay scoped so views can get get scoped services. yield return describe.Scoped(); yield return describe.Singleton(); yield return describe.Transient, ReflectedActionDescriptorProvider>(); yield return describe.Transient, ReflectedActionInvokerProvider>(); yield return describe.Singleton(); yield return describe.Transient(); yield return describe.Scoped(); yield return describe.Transient(); yield return describe.Scoped(); yield return describe.Transient(); yield return describe.Scoped(); yield return describe.Transient(); yield return describe.Scoped(); yield return describe.Transient(); yield return describe.Instance( new JsonOutputFormatter(JsonOutputFormatter.CreateDefaultSettings(), indent: false)); // The IGlobalFilterProvider is used to build the action descriptors (likely once) and so should // remain transient to avoid keeping it in memory. yield return describe.Transient(); yield return describe.Transient, DefaultFilterProvider>(); yield return describe.Transient(); yield return describe.Scoped(); yield return describe.Scoped(); yield return describe.Transient(); yield return describe.Singleton(); yield return describe.Transient(); yield return describe.Transient, DefaultViewComponentInvokerProvider>(); yield return describe.Transient(); yield return describe.Transient(); yield return describe.Singleton(); yield return describe.Singleton(); yield return describe.Singleton(); yield return describe.Describe( typeof(INestedProviderManager<>), typeof(NestedProviderManager<>), implementationInstance: null, lifecycle: LifecycleKind.Transient); yield return describe.Describe( typeof(INestedProviderManagerAsync<>), typeof(NestedProviderManagerAsync<>), implementationInstance: null, lifecycle: LifecycleKind.Transient); yield return describe.Transient(); yield return describe.Describe( typeof(IHtmlHelper<>), typeof(HtmlHelper<>), implementationInstance: null, lifecycle: LifecycleKind.Transient); yield return describe.Transient(); } } }