Working with Custom Providers
page 1 of 8
Published: 06 Feb 2007
Abstract
Creating your own provider from scratch is a difficult topic to understand. This article will create a provider from the abstract base class, to the configuration needs, to the static class that exposes it, like the other providers in the Microsoft .NET Framework do.
by Brian Mains
Feedback
Average Rating: 
Views (Total / Last 10 Days): 66785/ 102

Introduction

If you are familiar with ASP.NET 2.0, you understand the concept of providers.  Built-in to this version of the framework are the Membership, Roles, and Profile providers, to name a few.  In trying to understand providers are on my own, they turned out to be very complex mechanisms, involving so many different types of parts.  So, I wanted to write this article to show you the concept of creating your own custom provider from scratch.  In order to understand how it all works, you have to understand that with each provider, there are four parts:

·         Abstract class that defines the required properties/methods, and the derived implementations that provide the specific functionality

·         Configuration section that sets up the provider for your .NET application

·         Static class that makes the provider accessible to all

Using the membership provider as an example, you will see that this provider incorporates a membership element that resides as a child of the system.web parent element.  The MembershipProvider abstract class is defined in the System.Web.Security namespace, where all existing and any new providers inherit from.  To make use of this provider, the static Membership class ties in the derived provider types and utilizes the configuration section to set up the providers in the collection, as you will see.   To the user interface, the static class exposes the properties and methods of the default provider, which is specified in the configuration file.  In this way, it is a decoupled approach, as the Membership static class needs to know nothing about your implementation of the abstract class, and comes to find out which provider to use through the configuration file at runtime.

However, specific implementations of the provider approach are coupled in itself; the SqlMembershipProvider class requires the ASPNET standard database that is created by default for new web applications in Visual Studio .NET.  You can also specify a custom SQL database, but the table/stored procedure structure must be the same, which is where the rigidity comes into play.  However, it is possible to create a less-coupled approach based on the design of the provider.  For instance, a provider could implement the base MembershipProvider class and expose the names of the tables or stored procedures, so the developer can use a custom structure of sorts.  There are many possibilities.

Getting back to our custom provider example, the example I will be using is a Newsletter provider, which allows users to subscribe to certain newsletters belonging to a specific application.  An administrator will setup the newsletters that will be provided through the site, as well as other subscriber/newsletter administrative features.  You will see and understand the code in a moment.  Let's start at the beginning: the abstract class.


View Entire Article

User Comments

Title: Source Code   
Name: Satish Nandigam
Date: 2010-10-27 2:43:31 AM
Comment:
Hi This is a nice article . Can please provide the source code for custom Provider for the Newsletter.
thanks,
N.Satish
Title: Thanks   
Name: Anitha T S
Date: 2010-07-26 7:31:51 AM
Comment:
Thank you very much for your article on providers. Your article is easy to read and understand! I am a better because of it. ;)
Title: Question Reply   
Name: Brian Mains
Date: 2009-10-16 2:53:52 PM
Comment:
Hello,

Yes, DefaultProvider doesn't exist within ConfigurationSection; it exists in my custom base class, which I should have posted, but I didn't. My apologies.

In your custom section class, just add:

[ConfigurationProperty("defaultProvider")]
public string DefaultProvider
{
get { return (string)this["defaultProvider"]; }
}

[
ConfigurationProperty("providers", IsDefaultCollection=false),
ConfigurationCollection(ProviderSettingsCollection)
]
public ProviderSettingsCollection Providers
{
get { return (ProviderSettingsCollection)this["providers"]; }
}

That's what exists in my base class, as a helper. You can also download the project at: http://www.codeplex.com/nucleo, which has these files in Nucleo.dll, in the Nucleo.Providers namespace. I will be posting an update to this project soon with updated AJAX controls, but this code hasn't been touched so it will remain the same, if you are interested.
Title: Question   
Name: Mark Toth
Date: 2009-10-16 2:08:41 PM
Comment:
When I derive a class from ConfigurationSection I get the following error for DefaultProvider "no suitable method found to override". Am I missing something?
Title: Thanks   
Name: Mahr G. Mohyuddin
Date: 2009-04-22 9:21:56 AM
Comment:
Well explained, Brian!. Thanks.
Title: Many Thanks   
Name: Linda
Date: 2009-02-11 9:58:01 AM
Comment:
Thank you very much for your article on providers. Your article is easy to read and understand! I am a better because of it. ;)
Title: still confused reply   
Name: Brian
Date: 2008-08-28 8:50:50 AM
Comment:
The static class is a class separate from the rest of the code, which exposes the provider base class to the public. It's responsible for instantiating it.

SO this is something that should be in the same project as the provider, but is a separate class.
Title: still confused :(   
Name: .
Date: 2008-08-28 3:19:45 AM
Comment:
Would have been nice to be able to download code. I'm at a loss as to where to put the static class - whether I put it in the application which is trying to use the providers, or in the provider code itself as a separate class.
Title: good articles   
Name: I LIKE LT
Date: 2007-09-05 9:16:47 PM
Comment:
very good articles
Title: Good   
Name: Bilal Wani
Date: 2007-03-20 7:17:27 AM
Comment:
Nice Article!!!
Title: Patil   
Name: Sandip
Date: 2007-03-15 5:16:26 PM
Comment:
Nice Article!!!

-Sandip Patil
Title: Good   
Name: Ramamuni Reddy
Date: 2007-02-18 11:25:54 PM
Comment:
Hello Brian Mains,
Very Good Article.

With Regrads
Ramamuni reddy Mulapaku
Title: Provider Utility   
Name: Bilal Hadiar [MVP]
Date: 2007-02-06 6:07:46 AM
Comment:
Hello Brian,
It is a well written article, congratulations!

I would like to refer you and all the readers to a utility I created a while ago that helps you generate the skeleton of a provider files in a single button click,
Check it here:
http://bhaidar.net/cs/archive/2006/07/07/376.aspx

Regards
Title: Mr.   
Name: KotiReddy.
Date: 2007-02-06 12:30:15 AM
Comment:
Very Good Article.


Regards,
Koti Reddy. S






Community Advice: ASP | SQL | XML | Regular Expressions | Windows


©Copyright 1998-2017 ASPAlliance.com  |  Page Processed at 2017-09-21 3:01:24 AM  AspAlliance Recent Articles RSS Feed
About ASPAlliance | Newsgroups | Advertise | Authors | Email Lists | Feedback | Link To Us | Privacy | Search