From 235936920d6779e964984cf377687e648f21fcee Mon Sep 17 00:00:00 2001 From: Andrew Hoefling Date: Thu, 5 Dec 2019 02:22:31 -0500 Subject: [PATCH 1/4] Fixed MVC Memory Leak - Added MVC DependencyResolver and configured MVC Modules to use the default controller activator and dependency resolver. (#3369) --- .../DnnMvcControllerFactory.cs | 21 ------ .../DnnMvcDependencyResolver.cs | 71 +++++++++++++++++++ .../DotNetNuke.Web.Mvc.csproj | 3 +- .../Extensions/StartupExtensions.cs | 35 --------- DNN Platform/DotNetNuke.Web.Mvc/Startup.cs | 10 +-- 5 files changed, 78 insertions(+), 62 deletions(-) delete mode 100644 DNN Platform/DotNetNuke.Web.Mvc/DnnMvcControllerFactory.cs create mode 100644 DNN Platform/DotNetNuke.Web.Mvc/DnnMvcDependencyResolver.cs delete mode 100644 DNN Platform/DotNetNuke.Web.Mvc/Extensions/StartupExtensions.cs diff --git a/DNN Platform/DotNetNuke.Web.Mvc/DnnMvcControllerFactory.cs b/DNN Platform/DotNetNuke.Web.Mvc/DnnMvcControllerFactory.cs deleted file mode 100644 index b187ad97b41..00000000000 --- a/DNN Platform/DotNetNuke.Web.Mvc/DnnMvcControllerFactory.cs +++ /dev/null @@ -1,21 +0,0 @@ -using DotNetNuke.Common; -using System; -using System.Web.Mvc; -using System.Web.Routing; - -namespace DotNetNuke.Web.Mvc -{ - /// - /// DNN Specific MVC Controller Factory that attempts to use - /// Dependency Injection to include all dependencies on the - /// Controller. - /// - public class DnnMvcControllerFactory : DefaultControllerFactory, IControllerFactory - { - protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType) - { - var controller = (IController)Globals.DependencyProvider.GetService(controllerType); - return controller ?? base.GetControllerInstance(requestContext, controllerType); - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Mvc/DnnMvcDependencyResolver.cs b/DNN Platform/DotNetNuke.Web.Mvc/DnnMvcDependencyResolver.cs new file mode 100644 index 00000000000..55937e4e2fa --- /dev/null +++ b/DNN Platform/DotNetNuke.Web.Mvc/DnnMvcDependencyResolver.cs @@ -0,0 +1,71 @@ +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.Web.Mvc; + +namespace DotNetNuke.Web.Mvc +{ + /// + /// The implementation used in the + /// MVC Modules of DNN. + /// + internal class DnnMvcDependencyResolver : IDependencyResolver + { + private readonly IServiceProvider _serviceProvider; + private readonly IDependencyResolver _resolver; + + /// + /// Instantiate a new instance of the . + /// + /// + /// The to be used in the + /// + public DnnMvcDependencyResolver(IServiceProvider serviceProvider, IDependencyResolver resolver) + { + _serviceProvider = serviceProvider; + _resolver = resolver; + } + + /// + /// Returns the specified service from the scope + /// + /// + /// The service to be retrieved + /// + /// + /// The retrieved service + /// + public object GetService(Type serviceType) + { + try + { + return _serviceProvider.GetService(serviceType); + } + catch + { + return _resolver.GetService(serviceType); + } + } + + /// + /// Returns the specified services from the scope + /// + /// + /// The service to be retrieved + /// + /// + /// The retrieved service + /// + public IEnumerable GetServices(Type serviceType) + { + try + { + return _serviceProvider.GetServices(serviceType); + } + catch + { + return _resolver.GetServices(serviceType); + } + } + } +} diff --git a/DNN Platform/DotNetNuke.Web.Mvc/DotNetNuke.Web.Mvc.csproj b/DNN Platform/DotNetNuke.Web.Mvc/DotNetNuke.Web.Mvc.csproj index 10138b1eb7c..69bf2871dd8 100644 --- a/DNN Platform/DotNetNuke.Web.Mvc/DotNetNuke.Web.Mvc.csproj +++ b/DNN Platform/DotNetNuke.Web.Mvc/DotNetNuke.Web.Mvc.csproj @@ -116,8 +116,7 @@ - - + diff --git a/DNN Platform/DotNetNuke.Web.Mvc/Extensions/StartupExtensions.cs b/DNN Platform/DotNetNuke.Web.Mvc/Extensions/StartupExtensions.cs deleted file mode 100644 index f957c21d22d..00000000000 --- a/DNN Platform/DotNetNuke.Web.Mvc/Extensions/StartupExtensions.cs +++ /dev/null @@ -1,35 +0,0 @@ -using DotNetNuke.Web.Mvc.Framework.Controllers; -using DotNetNuke.DependencyInjection.Extensions; -using Microsoft.Extensions.DependencyInjection; -using System; -using System.Linq; - -namespace DotNetNuke.Web.Mvc.Extensions -{ - /// - /// Adds DNN MVC Specific startup extensions to simplify the - /// Class. - /// - internal static class StartupExtensions - { - /// - /// Configures all of the 's to be used - /// with the Service Collection for Dependency Injection. - /// - /// - /// Service Collection used to registering services in the container. - /// - public static void AddMvc(this IServiceCollection services) - { - var startuptypes = AppDomain.CurrentDomain.GetAssemblies() - .SelectMany(x => x.SafeGetTypes()) - .Where(x => typeof(IDnnController).IsAssignableFrom(x) && - x.IsClass && - !x.IsAbstract); - foreach (var controller in startuptypes) - { - services.AddTransient(controller); - } - } - } -} diff --git a/DNN Platform/DotNetNuke.Web.Mvc/Startup.cs b/DNN Platform/DotNetNuke.Web.Mvc/Startup.cs index b558760e47b..ad5ab585527 100644 --- a/DNN Platform/DotNetNuke.Web.Mvc/Startup.cs +++ b/DNN Platform/DotNetNuke.Web.Mvc/Startup.cs @@ -1,5 +1,5 @@ -using DotNetNuke.DependencyInjection; -using DotNetNuke.Web.Mvc.Extensions; +using DotNetNuke.Common; +using DotNetNuke.DependencyInjection; using Microsoft.Extensions.DependencyInjection; using System.Web.Mvc; @@ -9,9 +9,11 @@ public class Startup : IDnnStartup { public void ConfigureServices(IServiceCollection services) { - services.AddMvc(); - services.AddSingleton(); + services.AddSingleton(serviceProvider => ControllerBuilder.Current.GetControllerFactory()); services.AddSingleton(); + + IDependencyResolver resolver = new DnnMvcDependencyResolver(Globals.DependencyProvider, DependencyResolver.Current); + DependencyResolver.SetResolver(resolver); } } } From 11771cc493075954f875551887bc362f23f61ba0 Mon Sep 17 00:00:00 2001 From: Daniel Valadas Date: Thu, 5 Dec 2019 02:23:39 -0500 Subject: [PATCH 2/4] Adds sqldataprovider for 9.4.4 upgrades (#3373) --- .../SqlDataProvider/09.04.04.SqlDataProvider | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.04.04.SqlDataProvider diff --git a/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.04.04.SqlDataProvider b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.04.04.SqlDataProvider new file mode 100644 index 00000000000..4412108fcf0 --- /dev/null +++ b/DNN Platform/Website/Providers/DataProviders/SqlDataProvider/09.04.04.SqlDataProvider @@ -0,0 +1,9 @@ +/************************************************************/ +/***** SqlDataProvider *****/ +/***** *****/ +/***** *****/ +/***** Note: To manually execute this script you must *****/ +/***** perform a search and replace operation *****/ +/***** for {databaseOwner} and {objectQualifier} *****/ +/***** *****/ +/************************************************************/ \ No newline at end of file From eb8729cd6e99577717305b43f6739b939a81746e Mon Sep 17 00:00:00 2001 From: Brian Dukes Date: Thu, 5 Dec 2019 13:20:30 -0600 Subject: [PATCH 3/4] Add 9.4.4 platform checksum --- .../Components/Security/Resources/sums.resources | 1 + 1 file changed, 1 insertion(+) diff --git a/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources b/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources index 7d8f59a8ab2..2c2da6026b3 100644 --- a/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources +++ b/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources @@ -158,6 +158,7 @@ + From b27215c71854d2844ed19c7d97a8d1dca323db7f Mon Sep 17 00:00:00 2001 From: Daniel Aguilera Date: Fri, 6 Dec 2019 07:13:31 +0000 Subject: [PATCH 4/4] Added missing checksums (#3378) --- .../Components/Security/Resources/sums.resources | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources b/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources index 2c2da6026b3..340040ec72a 100644 --- a/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources +++ b/Dnn.AdminExperience/Extensions/Content/Dnn.PersonaBar.Extensions/Components/Security/Resources/sums.resources @@ -76,6 +76,7 @@ + @@ -198,4 +199,5 @@ +