using System.Reflection; using System.Web.Http.Controllers; using System.Web.Mvc; using LightInject; using Umbraco.Core; using Umbraco.Core.Composing; namespace Umbraco.Web { internal static class LightInjectExtensions { /// /// Registers all IControllers using the TypeLoader for scanning and caching found instances for the calling assembly /// /// /// /// public static void RegisterMvcControllers(this IServiceRegistry container, TypeLoader typeLoader, Assembly assembly) { //TODO: We've already scanned for UmbracoApiControllers and SurfaceControllers - should we scan again // for all controllers? Seems like we should just do this once and then filter. That said here we are // only scanning our own single assembly. Hrm. container.RegisterControllers(typeLoader, assembly); } /// /// Registers all IHttpController using the TypeLoader for scanning and caching found instances for the calling assembly /// /// /// /// public static void RegisterApiControllers(this IServiceRegistry container, TypeLoader typeLoader, Assembly assembly) { //TODO: We've already scanned for UmbracoApiControllers and SurfaceControllers - should we scan again // for all controllers? Seems like we should just do this once and then filter. That said here we are // only scanning our own single assembly. Hrm. container.RegisterControllers(typeLoader, assembly); } private static void RegisterControllers(this IServiceRegistry container, TypeLoader typeLoader, Assembly assembly) { var types = typeLoader.GetTypes(specificAssemblies: new[] { assembly }); foreach (var type in types) container.Register(type, new PerRequestLifeTime()); } } }