DNN Blog

Apr 2

Posted by: Charles Nurse
4/2/2008  RssIcon

In my last few blogs I have provided an overview of the new Features Module, which manages all the Extensions to the DotNetNuke Framework. (Note.  There is some debate in the core team at this time on the name to give that module, and it looks like we may be changing it to "Extensions").  This module brings all the various extension points together in one location (Authentication Systems, Containers, Languages, Modules, Providers, Skins and SkinObjects).  These blogs focussed on the Host users experience in managing these "Extensions".

In this blog I begin a series of blogs that focus on the new Extensions system from the developers perspective.  It is important to note here, that for the most part building/designing modules, skins and languages etc has not changed.  What has changed is how they are packaged, installed and uninstalled - in a universally consistent and extenisble manner.

Lets take a look at a Class Diagram of the major components of the Installer sub-system.

This diagram shows the major classes in the subsystem.  In many ways this is similar to the "old" Module Installer system.

  • Installer - This class represents the Facade (entry-point) into the sub-sytem.  In addition to its public Constructors it provides two public methods - Install and UnInstall.  This last method demonstrates the major difference between this new installer and the "old" module installer, in that it provides BOTH Install and Uninstall for the Extensions.
  • InstallerInfo - As with the "old" Module Installer, the InstallerInfo class provides information about the current instance of the Installer
  • InstallFile - This class represents each file in the installation package.
  • PackageInfo - This calls represents the Extension "Package" itself.  You will notice that a number of properties that are currently part of DesktopModules are now part of the PackageInfo object - Name, Version, FriendlyName, Description - and are hence now part of every "Extension".
  • Logger - As with the "old" Module Installer a Logger class is provided and is made available to all the components of the sub-system so that a detailed Log can be produced on INstall AND Uninstall.
  • ComponentInstallerBase and PackageInstaller - Theses classes are the core classes that do the work.  The ComponentInstallerBase class is an abstract class that provides 5 abstract methods - Install, Uninstall, ReadManifest, Commit and Rollback.  PackageInstaller is a concrete implementation that "installs" a package or extension.  The PackageInstaller has a property ComponentInstallers which is a "collection" of ComponentInstallerBases, which represent individual components in the Extension Package.

Packages and Components

In the above discussion, I have referred to the concept of Packages (PackageInfo and PackageInstaller classes) and Components.  The simple definition is that a Package is a collection of Components. 

For example a Module Package consists of a Module Component - the Module Definitions/Controls, an optional Assembly Component for compiled modules, an optional Script Component for the install/uninstall scripts and a File Component.  Similarly, an Authentication System Package consists of an Authentication System Component, an optional Assembly Component, a File Component.  The important thing to note here is that the difference between an Authentication System Package and a Module Package is that one has an Authentication System Component and the other has a Module Component - they BOTH have File and Assembly Components. 

This is the main feature of the new Installer - Packages are broken down into smaller Components so that common Install/Uninstall behaviours can be created once.  Once we have created a "library" of Component Installers, creating Installers for new Extension type becomes easy as much of the code already exists.

At the time of writing the Cambrian code-base has the following ComponentInstallers:

  • AssemblyInstaller - Installs assemblies - manages assembly versioning.
  • AuthenticationInstaller - Installs/Registers Authentication Systems.
  • CleanUpInstaller - Used to cleanup/delete old files on upgrade.
  • ConfigInstaller - Used to make changes to web.config (or any config file)
  • ContainerInstaller - Installs Container components
  • FileInstaller - Installs files
  • LanguageInstaller - Installs/Registers Languages
  • ModuleInstaller - Installs/Registers Modules
  • ResourceFileInstaller - Installs ResourceFiles (extracts the zip files and creates a manifest of the files in the zip)
  • ScriptInstaller - Runs Install/Upgrade scripts
  • SkinControlInstaller - Installs SkinControls (SkinObjects)
  • SkinInstaller - Installs Skin components

In this blog I have endeavoured to provide an overview of the new Component-based Extension Installer.  In a future blog, I will look at how this works, including a description of the new manifest that "controls" everything.

Tags:
Categories:
Location: Blogs Parent Separator Charles Nurse

5 comment(s) so far...


Re: Cambrian First Look - Extension Installer (Pt 1)

Hi Charles,
Will there be an Uninstall feature added so that module developers can do cleanup when an extension is removed? For instance updates to web.config?

By snapsis on   4/2/2008

Re: Cambrian First Look - Extension Installer (Pt 1)

Yes - all components have both Uninstall and Install - I will demonstrate this in a future blog.

By cnurse on   4/2/2008

Re: Cambrian First Look - Extension Installer (Pt 1)

This is wonderful. I love the fact that we'll have config installers and uninstallers. When you say that the AssemblyInstaller manages assembly versioning, does this mean that meta data will be stored to keep track of a ref count on shared assemblies so that a call to uninstall won't inadvertently remove a shared assembly? Also, and I don't know if the allusion to the internal debate was any kind of invitation to weigh in, but I would vote for extension. In my mind, DotNetNuke has done an excellent job of following the Open-Closed Principle (OCP). Open for Extension and Closed for modification. The core is full of great features that are there for everyone, but DNN really shines in its ability to provide a superior extensibility infrastructure. Great job!

By dworthley on   4/3/2008

Re: Cambrian First Look - Extension Installer (Pt 1)

Yes - the Assembly Component uses the Database to store the currently installed version, and it registers which "Packages" have a need for the assembly. Thus the install will only add the assembly to the \bin fodler IF its is not there or the installed version # is less than the new version #. Likewise on Uninstall it will only remove the assembly if no other packages have a "registration" in the db for that assembly.

By cnurse on   4/3/2008

Re: Cambrian First Look - Extension Installer (Pt 1)

does the package installer support recursive installation? For example, we can pack a module, a skin, a container into one package, so that, when the package is installed, the three components are processed at the same time.
further more, the component type could be "page", one package can include page, module, skin etc, thus, it should be installed as an advanced application, once the package is installed, a new page will be created with default skin, module ,even the content.

By koy2000@sina.com on   7/17/2008
Attend A Webinar
Free Demo Site
Download DotNetNuke Professional Edition Trial
Have Someone Contact Me

Like Us on Facebook Join our Network on LinkedIn Follow DNN Corporate on Twitter Follow DNN on Twitter

Advertisers

Sponsors

DotNetNuke Corporation

DotNetNuke Corp. is the steward of the DotNetNuke open source project, the most widely adopted Web Content Management Platform for building web sites and web applications on Microsoft .NET. Organizations use DotNetNuke to quickly develop and deploy interactive and dynamic web sites, intranets, extranets and web applications. The DotNetNuke platform is available in a free Community and subscription-based Professional and Enterprise Editions with an Elite Support option. DotNetNuke Corp. also operates Snowcovered.com where users purchase third party apps for the platform.