Provider Design Pattern

A couple months back I mentioned publishing our provider specification we're using for Whidbey. It's now available on MSDN in the resurrected Nothin' but ASP.NET column. This first article outlines the pattern, and in the following column we'll walk through using this pattern for ASP.NET 1.1. There are in fact two ASP.NET 1.1 applications following it today: the ASP.NET Forums (http://forums.asp.net/) and DotNetNuke (http://www.dotnetnuke.com).

Thanks to Kent our MSDN ASP.NET community superstar for helping get this pushed through --- and convincing the MSDN staff to start the column back up again! Hey, it was only a short-break (2 years <g>).

Published Tuesday, March 02, 2004 6:09 PM by Rob Howard

Comments

# re: Provider Design Pattern

Tuesday, March 02, 2004 8:27 PM by Bill
Why don't you follow the same Provider pattern from the <a href="http://msdn.microsoft.com/library/en-us/dnpag/html/authpro.asp">Authorization and Profile Application Block</a>? Or maybe, why didn't they use the Whidbey implementation? It seems like the provider pattern in Microsoft.ApplicationBlocks.Common is almost identical. Should I be using the code you'll provide in Part 2 of the article or the code from the PAG application block for my current apps?

# re: Provider Design Pattern

Tuesday, March 02, 2004 9:43 PM by Rob Howard
Great question!

The PAG group has the luxury of looking at our design plans, sometimes while they are being iterated over, and using those plans for building the blocks; including the Authorization and Profile block. The PAG team usually works with us to review the blocks they build (at least several of the more 'web' related blocks) and we of course made suggestions based on where we were headed. In this particular case I believe I had suggested they review the 'provider' implementation we were using for the ASP.NET Forums, as we knew we were going to somehow productize it.

As for which to implement, naturally I'll say the 'Whidbey' pattern as it is part of the framework. Furthermore, I believe that when Whidbey ships it will also impact the design of many of the current blocks.

# re: Provider Design Pattern

Wednesday, March 03, 2004 12:16 PM by Shaun Walker
This Provider Pattern has proven invaluable in allowing DotNetNuke to achieve its goal of database independence ( we currently support SQL Server and MS Access - and a mySQL provider has already been created by a third party developer ).

# re: Provider Design Pattern

Wednesday, March 03, 2004 12:20 PM by Shaun Walker
Sorry... the link in my previous commment is invalid - it should point to the location of the DotNetNuke Data Access Whitepaper which describes our specific use of the Provider model.

# Provider Models! COOL!

Wednesday, March 03, 2004 12:58 PM by TrackBack

# re: Provider Design Pattern

Wednesday, March 03, 2004 5:19 PM by Tom Lucas
This pattern should also allow great flexibility in future versions of DotNetNuke and other applications. Just think how following this provider pattern it would be easy to abstract out the Authentication part of DotNetNuke and allow developers to create different pluggable authentication providers.

Sure you could do Windows, AD, Forms but what about CA TopSecret or other proprietary authentication systems. Following the provider model, they could be interfaced and possibly integrated.

Great work to Rob and team!

# Afternoon Link Roundup

Wednesday, March 03, 2004 5:32 PM by TrackBack

# AbstractFactory

Thursday, March 04, 2004 4:07 AM by Fabrice
I've been working on this approach (based on your previous writings about it, amongst others). The solution I came up with is our AbstractFactory implementation.

Our configuration files look the same, except they have a Group level: Providers/Group{name, defaultProvider}/[add/clear/remove]. In your case, the groups would be named something like "Forums" or "Membership".
The implementation involves classes named Provider, FactoryGroup (= ProviderCollection), InstanceFactory, and the higher level AbstractFactory class. The configuration is loaded by a separate AbstractFactoryConfiguration class which sets up the AbstractFactory using an XML file.

Isn't the Provider design pattern roughly the AbstractFactory design pattern?

I noticed that you use base classes, but don't rely on interfaces.
I understand that the base classes bring in a common behavior. But you never talk about interfaces. In our case, each provider would implement an interface depending on the functionality it provides. Then every provider is used only through that interface. Of course, this doesn't prevent the use of base classes.
Is there something wrong with interfaces?

Do you use some caching? For example, do you keep a collection of the types used to create instances of the providers?

Waiting for the second part of your article to see the implementation bits :-)

# re: Provider Design Pattern

Thursday, March 04, 2004 8:57 AM by Fabrice
I also wonder: since you specify types using assembly type names and not file locations, the assemblies need to be in the AppDomain base directory or in the GAC, is that right?
Do you have a way to support assemblies located somewhere else?

# Provider Design Pattern

Saturday, March 06, 2004 5:47 AM by TrackBack

# Light Containers, Inversion of Control, Abstract Factory

Tuesday, March 09, 2004 10:12 AM by TrackBack

# The Data Loader Objects design pattern: Light Containers, Inversion of Control, Abstract Factory

Tuesday, March 09, 2004 10:17 AM by TrackBack

# re: Provider Design Pattern

Thursday, March 11, 2004 6:38 AM by Matt Phillips
When is Whidbey coming out? 2005
When are we going to be able to start using it? 2005/6

Please don't prematurely switch to Whidbey-only stuff. Making the best of the current stuff is hard enough as it is.

# re: Provider Design Pattern

Thursday, March 11, 2004 1:15 PM by Josh
Matt,

Although I concur with the thoughts of getting bombarded with Whidbey-only articles lately by just about every .NET site out there I actually appreciated this article because it's a technique that we can use now, that has a lot of value in it of itself(look at what gotdotnet did with a very similar pattern) but also prepares us for whidbey and possibly easing any eventual migration to whidbey. Thx Rob and keep these kind of articles coming :)

Josh

# re: Provider Design Pattern

Tuesday, March 16, 2004 3:13 AM by Johan Normén
Hi Rob.

I have just read this article and before that looked at the code in 2.0. Maybe other have notice this too, or have the same thought as I do.
There is one thing I don't like with this Provider Pattern for 1.1 and 2.0. Why instantiate all providers at the same time? Why not only instantiate the provider you are asking for?
If you want to use another provider, you call it, instantiate it and then cache it. Because you might use lots of providers (depends on the enterprise scale of your application) and all those providers are using space in the memory.

With this solution you don't need the <clear> and the <remove> tags, you only need the functionality to remove or clear providers within the collection class. It’s little tricky to know what providers you must clear or remove without looking at the machine.config file. When I implement stuff I don’t care about the machine.config and don’t want to tell my application to not use providers that are configured there. Usually, I don’t want to use the default providers at all, and never want them to insatiate either. And I don’t want to spend time to add code to remove or clear them within my web.config file. Is there any special case why you are doing this?

Best Regards Johan

# Whidbey Provider Design Pattern pitfalls

Monday, March 22, 2004 9:12 AM by TrackBack

# Whidbey Provider Design Pattern pitfalls

Monday, March 22, 2004 9:38 AM by TrackBack

# re: Provider Design Pattern

Wednesday, March 24, 2004 11:36 AM by John Hampton
Rob,

I am interested in your take on what Nick Berardi talks about over at http://blog.zigamorph.com/Default.aspx/archive/2004/03/23/146.aspx on his blog. He brings up some really good points on how Provider Design Patterns are not always the best solution and many times won't work for modular components.

John

# Thanks to Scott Watermasysk for .Text

Thursday, March 25, 2004 9:13 PM by TrackBack
Thanks to Scott Watermasysk for .Text

# Much ado about provider design patterns

Friday, March 26, 2004 9:48 AM by TrackBack

# Much ado about provider design patterns

Friday, March 26, 2004 9:57 AM by TrackBack

# Community Starter Kit 2.0 - Data Provider

Friday, March 26, 2004 3:11 PM by TrackBack

# re: Provider Design Pattern

Saturday, March 27, 2004 8:40 AM by Nick Berardi
Rob,

I am not saying that the provider design has no use. I actually said it is probably the best method for ASP.Net Forums, because you don't have to deal with plug-ins. Where the provider design is not the best solution for DNN, because they have to support multiple plug-in's that may not always have the same support for the database they are running.

The provider design is a great way to create plug-in's, but not plug-in's for plug-in's. I use the provider design exclusively in my project for everything except the database.

I use it to interface with modules, authentication plug-in's, portlets, webparts, basically anything that you can mention that is needed in a portal. I have abstracted them all to make the interfacing a little easier.

However, I beleive DNN shot them self in the foot, by not having a tracation broker that all the modules had to go through inorder to use the connection that is specified in the web.config. But again this is just my thoughts on the provider design when getting useded in a modular environment.

I would loved to be proved wrong on this, because the Provider Design is alot easier to work with, however I am not seeing how it will help in modules or controls that have no idea what database is getting used at the time they get loaded.

# re: Provider Design Pattern

Tuesday, March 30, 2004 4:40 AM by Marcus Mac Innes
Hi Rob,

There is one thing I was left confused about having read Part 1 of the article on MSDN.

I understand that the provider pattern is essentially a formalised and configurable implementation of an abstract factory which is especially useful for creating protected variations. Granted.

But you began the article talking about the personalization design model: The flexibility / poor performance with a name/value pair style Property table and inflexibility / good performance of a fixed Normal table design.

This is a common design issue and sticking with this specifically, I don’t see how the provider pattern addresses this problem.

When you said “we didn’t want users to have to call a DBA to modify the tables for incremental changes”, how does this change if users have implemented their own Provider? You still need to store the data and you are back to the same conundrum described above…

Thoughts?

# Community Starter Kit 2.0 - Data Provider

Monday, April 26, 2004 2:19 PM by TrackBack

# re: Provider Design Pattern

Monday, May 03, 2004 1:34 PM by Michael Collins
I am curious on your thoughts on unit test patterns using the provider block? How have you done unit testing in your projects on code that uses providers?

I've typically used interfaces in the past instead of abstract base classes because I've been leaning towards interface-based components rather than building up class hierarchies. This has had the advantage of using NMock and other dynamic proxy-type tools that let me mock and simulate my dependencies and interactions. With the proposed approach of using abstract base classes for providers instead of interfaces, I forsee having to return to defining hierarchies of mock objects, as well as having to create special configuration files for my unit tests to use the mock providers.

I'd be interested in reading about what types of strategies that you've used to unit test components that are dependent on providers.

# re: Provider Design Pattern - Article Part 2

Tuesday, May 04, 2004 12:24 PM by Daniel
Nice Article.

One question regarding the code:
You use a singleton pattern with class MembershipProvider and using a static Method Instance() to access the instance. Why isn't this a static property? No big difference to me, but I am just curious whether this was a common coding guideline or just a personal preference? Regarding the semantics I would rather use a get-only property.

# re: Provider Design Pattern

Wednesday, May 05, 2004 10:00 AM by MishMash
Very nice (though the errors in the code on the article (not the download) are a bit clumsy.
I'm a bit confused about the lack of an interface agreed between the Membership class and the various implementations of MembershipProvider.

I'm using the pattern for some work at the moment, and it seems to make sense to me to have the MembershipProvider and Membership classes inherit from IMembership (which defines the CreateUser and Validate methods).

I could be being dumb about this, but could you clarify why this isn't/shouldn't be the case.

Cheers


# re: Provider Design Pattern

Wednesday, May 05, 2004 10:01 AM by MishMash
Scratch that. I see why. My bad!

# Provider Design Pattern & Web Session State

Wednesday, May 05, 2004 1:14 PM by kfkyle
Great article. I am looking at using it for SessionState management since we need to support Oracle and SqlServer. Are there any forthcoming articles focusing on the specifics of this can be done in .NET 1.1 and how it will be done in .NET 2.0. I am considering using the approach employed in the UI Process App Block, but would like to do something consistent with the direction of the .NET 2.0 framework.

Has anyone had to deal with non-SqlServer Session State DB providers yet? Are there any other reference implementations?

# re: Provider Design Pattern

Wednesday, May 12, 2004 1:13 PM by Jiho Han
Two questions regarding the part I and II.
Hope someone can answer.

1. Why cache the constructor of the provider and not the provider itself?

2. I'm asking because I don't know but what purpose does ComVisible(false) serve?

Thanks!

# re: Provider Design Pattern

Wednesday, May 12, 2004 3:33 PM by Jiho Han
Ok, I kind of see the point in #1. If you cached the provider itself, then you'd be sharing a single object between multiple requests - which may be a problem when the object contains state information. Wait, but dont't most providers only contain static methods anyway? and what little properties it may contain will probably be static(readonly) as well.
Am I missing something here?

# re: Provider Design Pattern

Monday, May 17, 2004 10:03 AM by Jiho Han
more discussions...

http://weblogs.asp.net/cazzu/archive/2004/05/13/131149.aspx

# re: Provider Design Pattern

Wednesday, June 16, 2004 9:19 AM by 美容 整形 整容
?? ?? ??

# re: Provider Design Pattern

Thursday, June 17, 2004 7:38 AM by 美容 整形 整容
?? ??

# re: Provider Design Pattern

Thursday, July 15, 2004 7:16 AM by toilet seat
http://www.toilet-seat-bidet.com

# re: Provider Design Pattern

Thursday, July 15, 2004 7:16 AM by 洁具
http://sqs88.com

# re: Provider Design Pattern

Thursday, July 15, 2004 7:17 AM by jsdthcy
http://www.google163.net

# re: Provider Design Pattern

Thursday, July 15, 2004 8:04 AM by googlefans
??:

<a href="http://www.chinalifting.com/index.php">lifting gear</a>
<a href="http://www.chinalifting.com/">lifting gear</a>
<a href="http://www.cn-fireplace.com/">carved stone</a>
<a href="http://www.cn-fireplace.com/stone/carving/carved.htm">carved">http://www.cn-fireplace.com/stone/carving/carved.htm">carved stone</a>
<a href="http://www.chinese-supply.com/sprayers/">sprayer,trigger sprayer,lotion pump,pressure sprayer,plastic sprayer,garden

cleaner,garden accessories,finger sprayer</a>
<a href="http://www.chinese-supply.com/electric-winch/">winch, electric winch, china winch, winch cables, portable electric

winch, china power tools</a>
<a href="http://www.chinese-suppliers.com/water-dispenser/">washing machine, water dispenser</a>
<a href="http://www.chinese-suppliers.com/sprayer">sprayer, lotion pump, atomizer, trigger sprayer, cosmetic packaging</a>
<a href="http://www.fuel-dispenser.com/">fuel dispenser</a>
<a href="http://www.chinese-suppliers.com/winch/">winch</a>
<a href="http://www.fueling-dispenser.com/">fuel dispenser</a>
<a href="http://www.accessories-car.com/">Car Accessories</a>
<a href="http://www.zjruihong.cn/">auto/car air conditioning parts</a>
<a href="http://www.pasco-stationery.com/">super glue</a>
<a href="http://www.chinese-suppliers.com/compression-driver/">compression driver, titanium diaphragm, pa speaker</a>
<a href="http://www.rongpeng.com/">spray guns, air tools, air nailers, nail guns, pneumatic tools</a>
<a href="http://www.rongpeng.com/products1.htm">spray guns, air tools, air nailers, nail guns, pneumatic tools</a>
<a href="http://www.redyeastrice-china.com/">red yeast rice</a>
<a href="http://www.redyeastrice.cn/">red yeast rice</a>
<a href="http://www.mxbearings.com/main.htm">Bearings</a>
<a href="http://accessories.freewebpage.org/">Car accessories</a>
<a href="http://bearings.freewebpage.org">Bearings</a>
<a href="http://www.ancientmoods.com/customer/home.php">Chinese">http://www.ancientmoods.com/customer/home.php">Chinese clothing</a>
<a href="http://www.pasco-stationery.com/english/pro_14.htm">super glue</a>
<a href="http://www.cnwinch.com/">winch, electric winch, hand winch, electric hoist, china winch,china hoist, winches,

electric winches, electric hoists</a>
<a href="http://www.pasco-stationery.com/english/pro_01.htm">Correction Fluid</a>
<a href="http://www.pasco-stationery.com/english/pro_02.htm">Correction Pen</a>
<a href="http://www.pasco-stationery.com/english/pro_04.htm">Correction Tape</a>
<a href="http://www.pasco-stationery.com/english/pro_08.htm">Glue Tape</a>
<a href="http://www.pasco-stationery.com/english/pro_09.htm">Glitter Glue</a>
<a href="http://www.pasco-stationery.com/english/pro_10.htm">Glue Stick</a>
<a href="http://www.pasco-stationery.com/english/pro_18.htm">Epoxy Adhesive</a>
<a href="http://www.pasco-stationery.com/english/pro_19.htm">contact adhesive</a>
<a href="http://www.redyeastrice-china.com">red yeast rice</a>
<a href="http://www.mxbearings.com/">Bearings</a>
<a href="http://accessories.freewebpage.org">car accessories</a>
<a href="http://www.sinosyn.com/">dot matrix printer parts</a>
<a href="http://www.cnyunge.com/">sprayer,lotion pump, plastic cap, plastic sprayer, trigger sprayer</a>
<a href="http://www.chius.com.cn">heater, fan heater</a>
<a href="http://www.mxbearings.com/pro.htm">Bearings</a>">http://www.mxbearings.com/pro.htm">Bearings</a>
<a href="http://www.chinese-suppliers.com/fuse-cutout/">Fuse Cutout</a>
<a href="http://www.chinese-suppliers.com/fuse-cutout/">Contactors and Relays</a>
<a href="http://www.chinese-suppliers.com/heater/">Heater, fan heater</a>
<a href="http://www.ancientmoods.com/customer/home.php">Chinese">http://www.ancientmoods.com/customer/home.php">Chinese clothing</a>
<a href="http://www.chinese-suppliers.com/antique-furniture/">antique furniture</a>
<a href="http://www.chinese-suppliers.com/heater/">heater</a>
<a href="http://www.chinese-suppliers.com/hair-dryer/index.htm">hair dryer </a>
<a href="http://www.iron-world.com">steam iron, spray iron, dry iron</a>
<a href="http://www.cnyunge.com/index1.htm">sprayer, lotion pump, plastic cap, plastic sprayer, trigger sprayer</a>
<a href="http://www.mxbearings.com/pro.htm">Bearings</a>">http://www.mxbearings.com/pro.htm">Bearings</a>

??:

<a href="http://www.webrank.cn/">Google?? google????</a>
<a href="http://www.sinohome.net.cn/">???? ??????</a>
<a href="http://www.googlefans.cn/">Google??</a>">http://www.googlefans.cn/">Google??</a>
<a href="http://www.webrank.cn/cnrank/">Google??</a>
<a href="http://www.hangchen.com/">??</a>
<a href="http://www.gongsizhuce.com/">????</a>
<a href="http://www.gongsizhuce.com/wgqbsq.htm">?????? ??????</a>
<a href="http://www.branson-china.com/">???</a>
<a href="http://www.515315.com/">??</a>
<a href="http://www.overseas-edu.com/">??</a>
<a href="http://www.515315.net/">??</a>
<a href="http://www.hangchen.cn/">??</a>
<a href="http://www.jinchengdazhe.com/">??</a>
<a href="http://www.cbitech.com/">?????? ??????</a>
<a href="http://www.cbitech.com/zw/index.asp">?????? ??????</a>
<a href="http://www.lvhang.com/">????</a>
<a href="http://www.si-bay.com/">????</a>
<a href="http://www.sinohome.net.cn/googleranking.htm">Google??</a>
<a href="http://www.sinohome.net.cn/yahooranking.htm">Yahoo??</a>
<a href="http://www.sinohome.net.cn/solution.htm">??????</a>">http://www.sinohome.net.cn/solution.htm">??????</a>
<a href="http://huifu.googlefans.cn">????</a>
<a href="http://hotel.googlefans.cn">???? ????</a>
<a href="http://translate.googlefans.cn/">??</a>">http://translate.googlefans.cn/">??</a>
<a href="http://www.cnttec.com/">????</a>
<a href="http://www.86ieta.com/">????</a>
<a href="http://www.1211234.com/">????</a>
<a href="http://www.promo.com.cn/">???? ???? ????</a>
<a href="http://www.promo.com.cn/newweb/service.asp">??</a>
<a href="http://www.soonlink.net/">????</a>">http://www.soonlink.net/">????</a>
<a href="http://www.soonlink.com/">????</a>
<a href="http://www.shareit.com.cn/kvm.htm">kvm</a>
<a href="http://www.iboschool.cn/">???? ???</a>
<a href="http://translate.googlefans.cn/">??</a>">http://translate.googlefans.cn/">??</a>
<a href="http://www.putixin.com/">??</a>
<a href="http://www.800buy.com.cn/">??</a>
<a href="http://www.huazhangmba.com/">MBA</a>
<a href="http://www.bjgift.com">??</a>
<a href="http://www.shangguanhong.com/">??</a>
<a href="http://www.putixin.com/psy/">?????</a>
<a href="http://www.resky.com.cn">????</a>
<a href="http://www.black-eyes.net/">?? ????</a>
<a href="http://www.huifu.com/dianxinganli.htm">????,????,??????</a>
<a href="http://www.d-secure.com/changshi.htm">????</a>">http://www.d-secure.com/changshi.htm">????</a>
<a href="http://www.resky.com.cn/dianxinganli.htm">????</a>">http://www.resky.com.cn/dianxinganli.htm">????</a>
<a href="http://www.huifu.com/">???? ???? ??????</a>
<a href="http://huifu.freewebpage.org/">???? ???? ??????</a>
<a href="http://www.d-secure.com/">???? ???? ??????</a>
<a href="http://www.resky.com.cn/">???? ???? ??????</a>
<a href="http://www.resky.com.cn/dianxinganli.htm">???? ???? ??????</a>
<a href="http://www.d-secure.com/changshi.htm">???? ??????????</a>
<a href="http://huifu.googlefans.cn/">???? ???? ??????</a>


<a href="http://www.365jp.com/">??</a>
<a href="http://www.capelabel.com.cn">???,???,???</a>
<a href="http://www.transbridge.com.cn/">??</a>">http://www.transbridge.com.cn/">??</a>
<a href="http://www.dadaposter.com">????</a>">http://www.dadaposter.com">????</a>
<a href="http://www.sinohome.net.cn/solution.htm" >??????</a>
<a href="http://www.bj-dzjp.com/">??</a>
<a href="http://www.pusher.com.cn/">????</a>">http://www.pusher.com.cn/">????</a>
<a href="http://www.csetouch.com/">???</a>
<a href="http://www.touchscreen.com.cn/product2-1.html">???</a>
<a href="http://www.touch168.com/cp/cp.htm">???</a>
<a href="http://www.marvelon.com.cn/">????????</a>
<a href="http://www.bj-hchy.com/">??</a>
<a href="http://www.zidonghua.com.cn/zdh/index.asp">???</a>
<a href="http://www.zidonghua.com.cn/zdh/gongkong/index.asp">??</a>
<a href="http://www.easthome.com/hitech/index.asp">CCNA,CCNP,CCNA??,CCNP??,IT??</a>
<a href="http://www.cbitech.com/">?????? ??????</a>
<a href="http://www.transbridge.com.cn/">??</a>">http://www.transbridge.com.cn/">??</a>
<a href="http://www.googlefans.cn/">Google??</a>">http://www.googlefans.cn/">Google??</a>
<a href="http://www.topline.com.cn/">?? ?? ??</a>
<a href="http://www.pusher.com.cn/">????</a>">http://www.pusher.com.cn/">????</a>
<a href="http://www.smartdot.com.cn/">???? ?????</a>
<a href="http://www.8959.com/">???</a>
<a href="http://www.sharella.com/">????</a>
<a href="http://www.promo.com.cn/newweb/index.asp" >????</a>
<a href="http://www.promo.com.cn/">????</a>
<a href="http://www.anttm.com/">??????</a>">http://www.anttm.com/">??????</a>
<a href="http://www.cnnttm.com/">????</a>
<a href="http://www.anttm.com/">??????</a>">http://www.anttm.com/">??????</a>
<a href="http://www.soonlink.net/">????</a>">http://www.soonlink.net/">????</a>
<a href="http://www.sexeach.com/">????</a>
<a href="http://www.dns110.com/">????</a>
<a href="http://www.cnbjflower.com/">??</a>
<a href="http://www.marvelon.com.cn/">??</a>
<a href="http://www.china57.com/">DJ</a>
<a href="http://www.payono.com/">????</a>
<a href="http://www.zhanao.com/">?? ??? ???? ????</a>
<a href="http://www.promo.com.cn/newweb/consultation.asp">????</a>
<a href="http://www.dadaposter.com">????</a>">http://www.dadaposter.com">????</a>



<a href="http://www.easthome.com/">IT?? ????</a>
<a href="http://www.easthome.com/hitech/class_index.shtm">CCNA CCNA?? CCNA??</a>
<a href="http://www.easthome.com/hitech/class_cisco2.shtm">CCNP CCNP?? CCNP??</a>
<a href="http://www.easthome.com/hitech/class_cisco.shtm">CCNP CCNP?? CCNP??</a>
<a href="http://www.easthome.com/hitech/base25_com.shtm">CCIE</a>
<a href="http://www.easthome.com/hitech/class_cisco1.shtm">CCIE</a>
<a href="http://www.easthome.com/hitech/class_oracle.shtm">oracle dba</a>
<a href="http://www.easthome.com/hitech/base22_com.shtm">cisco??</a>
<a href="http://www.easthome.com/hitech/class_cisco.shtm">cisco??</a>
<a href="http://www.easthome.com/hitech/class_index.shtm">IT??</a>
<a href="http://www.easthome.com/hitech/class_ciw.shtm">Ciw Ciw?? ciw?? ??????</a>
<a href="http://www.easthome.com/hitech/class_ruanjian.shtm">J2EE??</a>
<a href="http://www.easthome.com/hitech/index.asp">J2EE??</a>
<a href="http://www.easthome.com/hitech/base1_com.shtm">Java??</a>
<a href="http://www.easthome.com/hitech/class_sun.shtm">Java??</a>
<a href="http://www.easthome.com/hitech/class_mcp.shtm">MCSE MCSE?? MCSE??</a>
<a href="http://www.easthome.com/hitech/class_jishidaxue.shtm">MCDBA?? MCDBA??</a>
<a href="http://www.easthome.com/hitech/class_mcp_mcsd.shtm">MCSE MCSE?? MCSE??</a>
<a href="http://www.easthome.com/hitech/class_oracle.shtm">Oracle??</a>
<a href="http://www.easthome.com/hitech/new_index.shtm">Oracle??</a>
<a href="http://www.easthome.com/hitech/ent_free.shtm">Oracle??</a>
<a href="http://www.easthome.com/hitech/index.asp">?????</a>
<a href="http://www.easthome.com/hitech/class_ruanjian.shtm">?????</a>
<a href="http://www.easthome.com/hitech/class_mcp_mcad.shtm">???? mcse2003</a>
<a href="http://www.easthome.com/hitech/class_sun.shtm">scjp</a>
<a href="http://www.114fang.com/main.asp">????</a>
<a href="http://www.shareit.com.cn/html/12_KVM_Switches/KVM.asp.htm">kvm</a>
<a href="http://www.yinhenet.com">?????</a>


<a href="http://videomeeting.freewebpage.org">????,??????</a>
<a href="http://manger.freewebpage.org/">????</a>
<a href="http://hangban.freewebpage.org">??</a>
<a href="http://webrank.freewebpage.org/">Google??</a>
<a href="http://webpop.freewebpage.org">????</a>
<a href="http://serank.freewebpage.org">??????</a>
<a href="http://liuhegcw.freewebpage.org/">???</a>
<a href="http://liuhe188.freewebpage.org/">???</a>
<a href="http://worldtrip.freewebpage.org/">??</a>
<a href="http://jipiaohere.freewebpage.org/">??</a>
<a href="http://briskfly.freewebpage.org/">??</a>
<a href="http://webrank.freewebpage.org/">Google????</a>
<a href="http://serank.freewebpage.org/">??????</a>
<a href="http://keywords.freewebpage.org/">???</a>
<a href="http://liuxuewang.freewebpage.org/">??</a>
<a href="http://youhua.freewebpage.org/">????</a>
<a href="http://hangbanzg.freewebpage.org">??</a>
<a href="http://dell.freewebpage.org/">???</a>
<a href="http://videomeeting.freewebpage.org">????</a>
<a href="http://www.jiatugz.com/cp.php">??? ?????</a>
<a href="http://www.jiatugz.com/">??? ?????</a>
<a href="http://www.huojia315.com/">??</a>
<a href="http://swan-storage.com/twice/cpjs.htm">??</a>
<a href="http://www.bjyuguo.com.cn/docc/gsjj.htm">??</a>
<a href="http://www.easypass.com.cn/">???? ???? ????</a>
<a href="http://www.mengfuxiang.com/">??</a>
<a href="http://www.huojia.net/">??</a>
<a href="http://www.chenguang-cn.com/docc/dingyi.asp">??????</a>



----------------------------------------------------------------------------------------
<table width="100" border="0" cellspacing="0" cellpadding="0">
<tr>
<td>
<MARQUEE scrollAmount=3>
<strong>????</strong>



</MARQUEE>
</td>
</tr>
</table>

<a href="http://www.cn-fireplace.com/stone/carving/carved.htm" class="link2">carved stone</a>

# re: Provider Design Pattern

Thursday, July 15, 2004 8:20 AM by 中国资æ
http://www.chinese-suppliers.com/sprayer

# 康信商标

???????????????,??????????????????,??????????????,????????????,??????????

# Distributed Provider Model

Monday, August 30, 2004 1:32 PM by TrackBack

# Distributed Provider Model

Monday, August 30, 2004 1:52 PM by TrackBack

# Mi primer Add-On para CommunityServer – Add-On Postal

Monday, July 31, 2006 10:50 PM by OberData

Tengo varios sitios en los cuales utilizo CommunityServer. Uno en particular llamado Chismes De Misiones...