Skip to content

Add Dependency Injection Support for ClientResourceManager #3985

Description

@SkyeHoefling

Description of problem

There is no interface for ClientResourceManager and it does not currently support Dependency Injection

Description of solution

Extract interface and register with Dependency Injection container.

Description of alternatives considered

N/A

Screenshots

N/A

Additional context

This extension point will allow developers to add significant performance improvements to DNN. After modifying my ClientResourceManager with async scripts and adjusting orders I had DNN loading on average 100ms-300ms faster on each request. This performance change is a breaking change to DNN which is why I want to extract an interface instead. If we open up this extension point I can implement my performance changes as a module that can be used in current releases of DNN.

A proper implementation of this change will completely de-couple DNN from the 3rd party Client Resource Management tool used in DNN. It'll give us an opportunity to investigate new ways to handle client scripts that will work in a potential .NET Core solution of DNN.

Affected browser

N/A

I will be submitting a pull request for this, I have implemented this in a fork already and it is working

Required Work

DotNetNuke.Web.Client has a circular dependency with DotNetNuke.Library and the chosen solution at time of implementation was to side-load the dlls into memory using reflection. This is an anti-pattern but was needed to solve the problem at the time. Prior to completing any feature for this we should add Dependency Injection for the following areas of DNN

Feature/Control Interface Pull Request ID Status
Globals.Status IApplicationInfo & IApplicationStatusInfo #3988 ✅ Completed
HostController IHostController #3990 ✅ Completed
PortalController IPortalController
PortalAliasController IPortalAliasController #4021 ✅ Completed

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions