From 3725b84b20147c6d0230a5c935a16f45c89f2775 Mon Sep 17 00:00:00 2001 From: Renaud Paquay Date: Mon, 21 Jun 2010 16:40:13 -0700 Subject: [PATCH] Refactoring a csproj file compiler/build provider * Removed unused "ServiceLocator" class * Added "OrchardHostContainerRegistry" class to enable Shim/HostContainer registration for DI * Refactored the BuildProvider for .csproj file to use the new OrchardHostContainerRegistry class and enable proper DI for implementations. --HG-- branch : dev --- .../Controllers/AccountController.cs | 42 ----- src/Orchard.Web/Web.config | 147 +++++++++--------- .../Environment/DefaultHostContainer.cs | 15 ++ src/Orchard/Environment/DefaultOrchardHost.cs | 9 +- .../Compilers/CSharpExtensionBuildProvider.cs | 26 ---- .../CSharpExtensionBuildProviderShim.cs | 29 ++++ ...cs => CSharpExtensionDirectoryCompiler.cs} | 3 +- .../CSharpProjectFullTrustCompiler.cs | 3 +- .../Compilers/CompileExtensionContext.cs | 6 + ...ompiler.cs => DefaultExtensionCompiler.cs} | 27 ++-- ...tParser.cs => DefaultProjectFileParser.cs} | 19 +-- .../Compilers/IExtensionCompiler.cs | 5 + .../Compilers/IProjectFileParser.cs | 7 + .../Compilers/ProjectFileDescriptor.cs | 12 ++ .../Extensions/ExtensionLoaderCoordinator.cs | 14 +- .../Environment/IOrchardHostContainer.cs | 5 + src/Orchard/Environment/IShim.cs | 9 ++ .../OrchardHostContainerRegistry.cs | 37 +++++ src/Orchard/Environment/OrchardStarter.cs | 4 + src/Orchard/Environment/ServiceLocator.cs | 16 -- src/Orchard/Orchard.Framework.csproj | 17 +- .../Providers/OrchardMembershipProvider.cs | 2 +- 22 files changed, 249 insertions(+), 205 deletions(-) create mode 100644 src/Orchard/Environment/DefaultHostContainer.cs delete mode 100644 src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProvider.cs create mode 100644 src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProviderShim.cs rename src/Orchard/Environment/Extensions/Compilers/{CSharpExtensionCompiler.cs => CSharpExtensionDirectoryCompiler.cs} (92%) create mode 100644 src/Orchard/Environment/Extensions/Compilers/CompileExtensionContext.cs rename src/Orchard/Environment/Extensions/Compilers/{CSharpProjectMediumTrustCompiler.cs => DefaultExtensionCompiler.cs} (61%) rename src/Orchard/Environment/Extensions/Compilers/{CSharpProjectParser.cs => DefaultProjectFileParser.cs} (70%) create mode 100644 src/Orchard/Environment/Extensions/Compilers/IExtensionCompiler.cs create mode 100644 src/Orchard/Environment/Extensions/Compilers/IProjectFileParser.cs create mode 100644 src/Orchard/Environment/Extensions/Compilers/ProjectFileDescriptor.cs create mode 100644 src/Orchard/Environment/IOrchardHostContainer.cs create mode 100644 src/Orchard/Environment/IShim.cs create mode 100644 src/Orchard/Environment/OrchardHostContainerRegistry.cs delete mode 100644 src/Orchard/Environment/ServiceLocator.cs diff --git a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs index 7bc7ef29a..e11486a81 100644 --- a/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs +++ b/src/Orchard.Web/Modules/Orchard.Users/Controllers/AccountController.cs @@ -270,46 +270,4 @@ namespace Orchard.Users.Controllers { #endregion } - - public interface IMembershipServiceShim { - int MinPasswordLength { get; } - - bool ValidateUser(string userName, string password); - MembershipCreateStatus CreateUser(string userName, string password, string email); - bool ChangePassword(string userName, string oldPassword, string newPassword); - } - - public class AccountMembershipService : IMembershipServiceShim { - private readonly MembershipProvider _provider; - - public AccountMembershipService() - : this(null) { } - - public AccountMembershipService(MembershipProvider provider) { - _provider = provider ?? Membership.Provider; - } - - #region IMembershipService Members - - public int MinPasswordLength { - get { return _provider.MinRequiredPasswordLength; } - } - - public bool ValidateUser(string userName, string password) { - return _provider.ValidateUser(userName, password); - } - - public MembershipCreateStatus CreateUser(string userName, string password, string email) { - MembershipCreateStatus status; - _provider.CreateUser(userName, password, email, null, null, true, null, out status); - return status; - } - - public bool ChangePassword(string userName, string oldPassword, string newPassword) { - var currentUser = _provider.GetUser(userName, true /* userIsOnline */); - return currentUser.ChangePassword(oldPassword, newPassword); - } - - #endregion - } } \ No newline at end of file diff --git a/src/Orchard.Web/Web.config b/src/Orchard.Web/Web.config index df511b385..20f62d942 100644 --- a/src/Orchard.Web/Web.config +++ b/src/Orchard.Web/Web.config @@ -10,15 +10,15 @@ - - - - - - + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + - - - - - + + + + + diff --git a/src/Orchard/Environment/DefaultHostContainer.cs b/src/Orchard/Environment/DefaultHostContainer.cs new file mode 100644 index 000000000..cd077abd5 --- /dev/null +++ b/src/Orchard/Environment/DefaultHostContainer.cs @@ -0,0 +1,15 @@ +using Autofac; + +namespace Orchard.Environment { + public class DefaultOrchardHostContainer : IOrchardHostContainer { + private readonly IContainer _container; + + public DefaultOrchardHostContainer(IContainer container) { + _container = container; + } + + public T Resolve() { + return _container.Resolve(); + } + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/DefaultOrchardHost.cs b/src/Orchard/Environment/DefaultOrchardHost.cs index c8228b788..0e355ab19 100644 --- a/src/Orchard/Environment/DefaultOrchardHost.cs +++ b/src/Orchard/Environment/DefaultOrchardHost.cs @@ -17,14 +17,13 @@ using Orchard.Utility.Extensions; namespace Orchard.Environment { public class DefaultOrchardHost : IOrchardHost, IShellSettingsManagerEventHandler, IShellDescriptorManagerEventHandler { private readonly ControllerBuilder _controllerBuilder; - private readonly IShellSettingsManager _shellSettingsManager; private readonly IShellContextFactory _shellContextFactory; private readonly IRunningShellTable _runningShellTable; private readonly IProcessingEngine _processingEngine; - private readonly IExtensionManager _extensionManager; private readonly IExtensionLoaderCoordinator _extensionLoaderCoordinator; private readonly ICacheManager _cacheManager; + private readonly object _syncLock = new object(); private IEnumerable _current; @@ -33,18 +32,18 @@ namespace Orchard.Environment { IShellContextFactory shellContextFactory, IRunningShellTable runningShellTable, IProcessingEngine processingEngine, - IExtensionManager extensionManager, IExtensionLoaderCoordinator extensionLoaderCoordinator, ICacheManager cacheManager, ControllerBuilder controllerBuilder) { + _shellSettingsManager = shellSettingsManager; _shellContextFactory = shellContextFactory; _runningShellTable = runningShellTable; _processingEngine = processingEngine; - _extensionManager = extensionManager; _extensionLoaderCoordinator = extensionLoaderCoordinator; _cacheManager = cacheManager; _controllerBuilder = controllerBuilder; + Logger = NullLogger.Instance; } @@ -82,7 +81,7 @@ namespace Orchard.Environment { IEnumerable BuildCurrent() { if (_current == null) { - lock (this) { + lock (_syncLock) { if (_current == null) { SetupExtensions(); MonitorExtensions(); diff --git a/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProvider.cs b/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProvider.cs deleted file mode 100644 index 94d5ec9c0..000000000 --- a/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProvider.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Web.Compilation; -using Orchard.FileSystems.VirtualPath; - -namespace Orchard.Environment.Extensions.Compilers { - public class CSharpExtensionBuildProvider : BuildProvider { - private readonly CompilerType _codeCompilerType; - - public CSharpExtensionBuildProvider() { - _codeCompilerType = GetDefaultCompilerTypeForLanguage("C#"); - } - - public override CompilerType CodeCompilerType { get { return _codeCompilerType; } } - - public override void GenerateCode(AssemblyBuilder assemblyBuilder) { - //Debug.WriteLine(string.Format("BuildProvider for file \"{0}\"", this.VirtualPath)); - - //TODO: It probably would be better to access the OrchardHost container - // to resolve these dependencies. - var virtualPathProvider = new DefaultVirtualPathProvider(); - var compiler = new CSharpProjectMediumTrustCompiler(virtualPathProvider); - - var aspNetAssemblyBuilder = new AspNetAssemblyBuilder(assemblyBuilder, this); - compiler.CompileProject(this.VirtualPath, aspNetAssemblyBuilder); - } - } -} \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProviderShim.cs b/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProviderShim.cs new file mode 100644 index 000000000..c44cd2244 --- /dev/null +++ b/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionBuildProviderShim.cs @@ -0,0 +1,29 @@ +using System.Web.Compilation; + +namespace Orchard.Environment.Extensions.Compilers { + public class CSharpExtensionBuildProviderShim : BuildProvider, IShim { + private readonly CompilerType _codeCompilerType; + + public CSharpExtensionBuildProviderShim() { + OrchardHostContainerRegistry.RegisterShim(this); + + _codeCompilerType = GetDefaultCompilerTypeForLanguage("C#"); + } + + public IOrchardHostContainer HostContainer { get; set; } + + public override CompilerType CodeCompilerType { + get { + return _codeCompilerType; + } + } + + public override void GenerateCode(AssemblyBuilder assemblyBuilder) { + var context = new CompileExtensionContext { + VirtualPath = this.VirtualPath, + AssemblyBuilder = new AspNetAssemblyBuilder(assemblyBuilder, this) + }; + HostContainer.Resolve().Compile(context); + } + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionCompiler.cs b/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionDirectoryCompiler.cs similarity index 92% rename from src/Orchard/Environment/Extensions/Compilers/CSharpExtensionCompiler.cs rename to src/Orchard/Environment/Extensions/Compilers/CSharpExtensionDirectoryCompiler.cs index b267831db..d20a608e5 100644 --- a/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionCompiler.cs +++ b/src/Orchard/Environment/Extensions/Compilers/CSharpExtensionDirectoryCompiler.cs @@ -8,8 +8,9 @@ using System.Web.Compilation; namespace Orchard.Environment.Extensions.Compilers { /// /// Compile a C# extension into an assembly given a directory location + /// Note: Currently not used... /// - public class CSharpExtensionCompiler { + public class CSharpExtensionDirectoryCompiler { public CompilerResults CompileProject(string location) { var codeProvider = CodeDomProvider.CreateProvider("cs"); diff --git a/src/Orchard/Environment/Extensions/Compilers/CSharpProjectFullTrustCompiler.cs b/src/Orchard/Environment/Extensions/Compilers/CSharpProjectFullTrustCompiler.cs index 6ad1664ea..e7473ad51 100644 --- a/src/Orchard/Environment/Extensions/Compilers/CSharpProjectFullTrustCompiler.cs +++ b/src/Orchard/Environment/Extensions/Compilers/CSharpProjectFullTrustCompiler.cs @@ -7,6 +7,7 @@ using Orchard.FileSystems.VirtualPath; namespace Orchard.Environment.Extensions.Compilers { /// /// Compile a C# extension into an assembly given a directory location + /// Note: currently not used... /// public class CSharpProjectFullTrustCompiler { private readonly IVirtualPathProvider _virtualPathProvider; @@ -26,7 +27,7 @@ namespace Orchard.Environment.Extensions.Compilers { var directory = _virtualPathProvider.GetDirectoryName(virtualPath); using (var stream = _virtualPathProvider.OpenFile(virtualPath)) { - var descriptor = new CSharpProjectParser().Parse(stream); + var descriptor = new DefaultProjectFileParser().Parse(stream); var references = GetReferencedAssembliesLocation(); var options = new CompilerParameters(references.ToArray()); diff --git a/src/Orchard/Environment/Extensions/Compilers/CompileExtensionContext.cs b/src/Orchard/Environment/Extensions/Compilers/CompileExtensionContext.cs new file mode 100644 index 000000000..4a6bf13e2 --- /dev/null +++ b/src/Orchard/Environment/Extensions/Compilers/CompileExtensionContext.cs @@ -0,0 +1,6 @@ +namespace Orchard.Environment.Extensions.Compilers { + public class CompileExtensionContext { + public string VirtualPath { get; set; } + public IAssemblyBuilder AssemblyBuilder { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/Compilers/CSharpProjectMediumTrustCompiler.cs b/src/Orchard/Environment/Extensions/Compilers/DefaultExtensionCompiler.cs similarity index 61% rename from src/Orchard/Environment/Extensions/Compilers/CSharpProjectMediumTrustCompiler.cs rename to src/Orchard/Environment/Extensions/Compilers/DefaultExtensionCompiler.cs index 902b42b40..8da6db268 100644 --- a/src/Orchard/Environment/Extensions/Compilers/CSharpProjectMediumTrustCompiler.cs +++ b/src/Orchard/Environment/Extensions/Compilers/DefaultExtensionCompiler.cs @@ -2,28 +2,33 @@ using System.IO; using System.Linq; using Orchard.FileSystems.VirtualPath; +using Orchard.Logging; namespace Orchard.Environment.Extensions.Compilers { /// /// Compile a C# extension into an assembly given a directory location /// - public class CSharpProjectMediumTrustCompiler { + public class DefaultExtensionCompiler : IExtensionCompiler { private readonly IVirtualPathProvider _virtualPathProvider; + private readonly IProjectFileParser _projectFileParser; - public CSharpProjectMediumTrustCompiler(IVirtualPathProvider virtualPathProvider) { + public DefaultExtensionCompiler(IVirtualPathProvider virtualPathProvider, IProjectFileParser projectFileParser) { _virtualPathProvider = virtualPathProvider; + _projectFileParser = projectFileParser; + Logger = NullLogger.Instance; } - /// - /// Compile a csproj file given its virtual path, a build provider and an assembly builder. - /// This method works in medium trust. - /// - public void CompileProject(string virtualPath, IAssemblyBuilder assemblyBuilder) { - using (var stream = _virtualPathProvider.OpenFile(virtualPath)) { - var descriptor = new CSharpProjectParser().Parse(stream); - var directory = _virtualPathProvider.GetDirectoryName(virtualPath); + public ILogger Logger { get; set; } + + public void Compile(CompileExtensionContext context) { + Logger.Information("Generate code for file \"{0}\"", context.VirtualPath); + + using (var stream = _virtualPathProvider.OpenFile(context.VirtualPath)) { + var descriptor = _projectFileParser.Parse(stream); + + var directory = _virtualPathProvider.GetDirectoryName(context.VirtualPath); foreach (var filename in descriptor.SourceFilenames.Select(f => _virtualPathProvider.Combine(directory, f))) { - assemblyBuilder.AddCodeCompileUnit(CreateCompileUnit(filename)); + context.AssemblyBuilder.AddCodeCompileUnit(CreateCompileUnit(filename)); } } } diff --git a/src/Orchard/Environment/Extensions/Compilers/CSharpProjectParser.cs b/src/Orchard/Environment/Extensions/Compilers/DefaultProjectFileParser.cs similarity index 70% rename from src/Orchard/Environment/Extensions/Compilers/CSharpProjectParser.cs rename to src/Orchard/Environment/Extensions/Compilers/DefaultProjectFileParser.cs index 1c0288149..2152bc3df 100644 --- a/src/Orchard/Environment/Extensions/Compilers/CSharpProjectParser.cs +++ b/src/Orchard/Environment/Extensions/Compilers/DefaultProjectFileParser.cs @@ -5,24 +5,11 @@ using System.Xml; using System.Xml.Linq; namespace Orchard.Environment.Extensions.Compilers { - public class CSharpProjectDescriptor { - public string AssemblyName { get; set; } - public IEnumerable SourceFilenames { get; set; } - public IEnumerable References { get; set; } - } + public class DefaultProjectFileParser : IProjectFileParser { - public class ReferenceDescriptor { - public string AssemblyName { get; set; } - - public override string ToString() { - return "{" + (AssemblyName ?? "") + "}"; - } - } - - public class CSharpProjectParser { - public CSharpProjectDescriptor Parse(Stream stream) { + public ProjectFileDescriptor Parse(Stream stream) { var document = XDocument.Load(XmlReader.Create(stream)); - return new CSharpProjectDescriptor { + return new ProjectFileDescriptor { AssemblyName = GetAssemblyName(document), SourceFilenames = GetSourceFilenames(document).ToArray(), References = GetReferences(document).ToArray() diff --git a/src/Orchard/Environment/Extensions/Compilers/IExtensionCompiler.cs b/src/Orchard/Environment/Extensions/Compilers/IExtensionCompiler.cs new file mode 100644 index 000000000..30bd05ed3 --- /dev/null +++ b/src/Orchard/Environment/Extensions/Compilers/IExtensionCompiler.cs @@ -0,0 +1,5 @@ +namespace Orchard.Environment.Extensions.Compilers { + public interface IExtensionCompiler { + void Compile(CompileExtensionContext context); + } +} diff --git a/src/Orchard/Environment/Extensions/Compilers/IProjectFileParser.cs b/src/Orchard/Environment/Extensions/Compilers/IProjectFileParser.cs new file mode 100644 index 000000000..33ea9f1aa --- /dev/null +++ b/src/Orchard/Environment/Extensions/Compilers/IProjectFileParser.cs @@ -0,0 +1,7 @@ +using System.IO; + +namespace Orchard.Environment.Extensions.Compilers { + public interface IProjectFileParser { + ProjectFileDescriptor Parse(Stream stream); + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/Compilers/ProjectFileDescriptor.cs b/src/Orchard/Environment/Extensions/Compilers/ProjectFileDescriptor.cs new file mode 100644 index 000000000..7fef8e138 --- /dev/null +++ b/src/Orchard/Environment/Extensions/Compilers/ProjectFileDescriptor.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; + +namespace Orchard.Environment.Extensions.Compilers { + public class ProjectFileDescriptor { + public string AssemblyName { get; set; } + public IEnumerable SourceFilenames { get; set; } + public IEnumerable References { get; set; } + } + public class ReferenceDescriptor { + public string AssemblyName { get; set; } + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs b/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs index 24fb9d0f2..61bda79ed 100644 --- a/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs +++ b/src/Orchard/Environment/Extensions/ExtensionLoaderCoordinator.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.IO; using System.Linq; using Orchard.Caching; using Orchard.Environment.Extensions.Loaders; @@ -21,10 +20,12 @@ namespace Orchard.Environment.Extensions { IExtensionManager extensionManager, IEnumerable loaders, IHostEnvironment hostEnvironment) { + _dependenciesFolder = dependenciesFolder; _extensionManager = extensionManager; _loaders = loaders.OrderBy(l => l.Order); _hostEnvironment = hostEnvironment; + T = NullLocalizer.Instance; Logger = NullLogger.Instance; } @@ -37,19 +38,16 @@ namespace Orchard.Environment.Extensions { var extensions = _extensionManager.AvailableExtensions().Where(d => d.ExtensionType == "Module").ToList(); var existingDependencies = _dependenciesFolder.LoadDescriptors().ToList(); - - var sameExtensions = extensions.Where(e => existingDependencies.Any(e2 => e2.Name == e.Name)).ToList(); var deletedDependencies = existingDependencies.Where(e => !extensions.Any(e2 => e2.Name == e.Name)).ToList(); - var newExtensions = extensions.Except(sameExtensions).ToList(); - var ctx = new ExtensionLoadingContext(); + var loadingContext = new ExtensionLoadingContext(); // Notify all loaders about extensions removed from the web site foreach (var dependency in deletedDependencies) { Logger.Information("Extension {0} has been removed from site", dependency.Name); foreach (var loader in _loaders) { if (dependency.LoaderName == loader.Name) { - loader.ExtensionRemoved(ctx, dependency); + loader.ExtensionRemoved(loadingContext, dependency); } } } @@ -58,11 +56,11 @@ namespace Orchard.Environment.Extensions { // load that extension. var newDependencies = new List(); foreach (var extension in extensions) { - ProcessExtension(ctx, extension, existingDependencies, newDependencies); + ProcessExtension(loadingContext, extension, existingDependencies, newDependencies); } // Execute all the work need by "ctx" - ProcessContextCommands(ctx); + ProcessContextCommands(loadingContext); // And finally save the new entries in the dependencies folder _dependenciesFolder.StoreDescriptors(newDependencies); diff --git a/src/Orchard/Environment/IOrchardHostContainer.cs b/src/Orchard/Environment/IOrchardHostContainer.cs new file mode 100644 index 000000000..f7228ddd8 --- /dev/null +++ b/src/Orchard/Environment/IOrchardHostContainer.cs @@ -0,0 +1,5 @@ +namespace Orchard.Environment { + public interface IOrchardHostContainer { + T Resolve(); + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/IShim.cs b/src/Orchard/Environment/IShim.cs new file mode 100644 index 000000000..1dee0c789 --- /dev/null +++ b/src/Orchard/Environment/IShim.cs @@ -0,0 +1,9 @@ +namespace Orchard.Environment { + /// + /// Interface implemented by shims for ASP.NET singleton services that + /// need access to the HostContainer instance. + /// + public interface IShim { + IOrchardHostContainer HostContainer { get; set;} + } +} \ No newline at end of file diff --git a/src/Orchard/Environment/OrchardHostContainerRegistry.cs b/src/Orchard/Environment/OrchardHostContainerRegistry.cs new file mode 100644 index 000000000..8dd27ea12 --- /dev/null +++ b/src/Orchard/Environment/OrchardHostContainerRegistry.cs @@ -0,0 +1,37 @@ +using System.Collections.Generic; + +namespace Orchard.Environment { + /// + /// Provides ability to connect Shims and the OrchardHostContainer + /// + public static class OrchardHostContainerRegistry { + private static readonly IList _shims = new List(); + private static IOrchardHostContainer _hostContainer; + + public static void RegisterShim(IShim shim) { + _shims.Add(shim); + shim.HostContainer = _hostContainer; + } + + public static void RegisterHostContainer(IOrchardHostContainer container) { + if (object.ReferenceEquals(_hostContainer, container)) + return; + + UnregisterContainerShims(); + _hostContainer = container; + RegisterContainerInShims(); + } + + private static void UnregisterContainerShims() { + foreach (var shim in _shims) { + shim.HostContainer = null; + } + } + + private static void RegisterContainerInShims() { + foreach (var shim in _shims) { + shim.HostContainer = _hostContainer; + } + } + } +} diff --git a/src/Orchard/Environment/OrchardStarter.cs b/src/Orchard/Environment/OrchardStarter.cs index 83c96d895..e339e5361 100644 --- a/src/Orchard/Environment/OrchardStarter.cs +++ b/src/Orchard/Environment/OrchardStarter.cs @@ -9,6 +9,7 @@ using Orchard.Caching; using Orchard.Environment.AutofacUtil; using Orchard.Environment.Configuration; using Orchard.Environment.Extensions; +using Orchard.Environment.Extensions.Compilers; using Orchard.Environment.Extensions.Folders; using Orchard.Environment.Extensions.Loaders; using Orchard.Environment.ShellBuilders; @@ -37,6 +38,8 @@ namespace Orchard.Environment { builder.RegisterType().As().SingleInstance(); builder.RegisterType().As().SingleInstance(); builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); + builder.RegisterType().As().SingleInstance(); RegisterVolatileProvider(builder); RegisterVolatileProvider(builder); @@ -134,6 +137,7 @@ namespace Orchard.Environment { } } + OrchardHostContainerRegistry.RegisterHostContainer(new DefaultOrchardHostContainer(container)); return container.Resolve(); } } diff --git a/src/Orchard/Environment/ServiceLocator.cs b/src/Orchard/Environment/ServiceLocator.cs deleted file mode 100644 index d0dd2bfe4..000000000 --- a/src/Orchard/Environment/ServiceLocator.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; - -namespace Orchard.Environment { - public static class ServiceLocator { - private static Func _locator; - - public static void SetLocator(Func locator) { - _locator = locator; - } - - public static T Resolve() { - return (T)_locator(typeof(T)); - } - - } -} diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index ade1484b9..eea79bacb 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -353,6 +353,14 @@ + + + + + + + + @@ -371,11 +379,11 @@ - - - + + + - + @@ -560,7 +568,6 @@ - diff --git a/src/Orchard/Security/Providers/OrchardMembershipProvider.cs b/src/Orchard/Security/Providers/OrchardMembershipProvider.cs index 99b59e04c..5f09ddb45 100644 --- a/src/Orchard/Security/Providers/OrchardMembershipProvider.cs +++ b/src/Orchard/Security/Providers/OrchardMembershipProvider.cs @@ -6,7 +6,7 @@ namespace Orchard.Security.Providers { public class OrchardMembershipProvider : MembershipProvider { static IMembershipService GetService() { - return ServiceLocator.Resolve(); + throw new NotImplementedException("The OrchardMemberShipProvider is not supported anymore. Use the IMembershipService interface instead."); } static MembershipSettings GetSettings() {