advanced web form practices - miguel a. castro
TRANSCRIPT
ineta
.NET Architect, Developer, & Trainer Microsoft MVP ASP Insider Member of the INETA Speakers Bureau Conference Speaker Creator of CodeBreeze In IT business since 1986
Your Speaker
2
Agenda
• What is a Provider?
• The [ASP.NET] Provider Model
• The Config File
• Identifying the Need for Swappable State Storage
• Designing & Developing the Swappable State Storage Provider
• Summary
What is a Provider?• Based on the Strategy Pattern (GoF)
• Allows the separation of definition and implementation + ability to swap implementations
4
Provider Definition(interface or abstract
class)
Concrete class 1 Concrete class 2
Config decides
which to use.
The ASP.NET Provider Model
• Designed by the ASP.NET team
• Part of System.Web.dll• Used by many features of ASP.NET
• Membership, Roles, Profile, WebPart, Personalization, Session, Logging, etc.
• Not just for ASP.NET
5
Config-file Provider Sections
6
<membership defaultProvider="{defaultProvider}"> <providers> <add name="{provider name}“ type="{.Net type}" .../> <add name="{provider name}“ type="{.Net type}" .../> </providers> </membership>
The Membership Provider
7
Membership.CreateUser
Factory Class Command
Static Constructor:•Read Web.Config file•Determine what Provider to use•Instantiate Provider and cast to Abstraction•Call CreateUser in provider
The Membership Provider
8
Membership Object Model
Membership
MembershipProvider
SqlMembershipProvider
Static Factory Class
Abstraction
Provider Class
The Membership Provider
9
<membership defaultProvider=“AspMembershipProvider"> <providers>
<clear /><add name="AspMembershipProvider“
type=“System.Web.Security. SqlMembershipProvider“ connectionStringName="connStr“ requiresUniqueEmail="true”
… other attributes … </providers></membership>
Swappable State StorageRequirements
• Ability to swap out method of state storage on-the-fly.– Session– Application– Cache– Cookies
• Ability to define more than one state-storage provider.
Swappable State StorageDesign
• Configuration section handler.– Config model follows standard provider
config model
• Static factory class for entry point.
• Provider Base class defines public interface.
• One provider implementation class for each type of storage.
Swappable State StorageDesign
• Data:– Ability to isolate storage by provider name
– Ability to isolate storage by user• (using the Session ID)
– Key and Value used for storage/retrieval
• Behavior:– Store an item
– Retrieve a stored item
Swappable State Storage
• Some data is static for ALL usage– Information described in previous slides
• Some data is different for EACH usage– Key used for storage– Value being stored
• Static data can be fed using configuration
• Dynamic data fed into method arguments
13
Swappable State Storage Static Attributes
• isolateProvider– Uses name of the provider in the storage key– Allows two instances of same provider type to
store using same key
• isolateUser– Uses session ID in the storage key– Allows two users to store using same key– Important in Application and Cache
14
Configuration Section
15
<configSections> <sectionGroup name="system.web"> <section name="stateStorage" type="WebFormLibrary. StateStorageSection, WebFormLibrary"/> </sectionGroup> </configSections>
Configuration Section
16
<stateStorage defaultProvider="SessionStorageProvider"> <providers> <clear/> <add name=" SessionStorageProvider " type="WebFormLibrary. SessionStateStorageProvider, WebFormLibrary" isolateProvider="true" /> <add name="ApplicationStorageProvider" type="WebFormLibrary. ApplicationStateStorageProvider, WebFormLibrary" isolateUser="true" isolateProvider="true" /> </providers> </stateStorage>
Custom Config-Section Class
• Inherits from ConfigurationSection• Properties:
• DefaultProvider:string• Providers:ProviderSettingsCollection
• Decorated with ConfigurationProperty• Rest of configuration definition handled by ProviderSettingsCollection type
17
The Provider’s Definition
• Abstract class
• Inherits from ProviderBase• Defines fields that will come in from config
• Defines properties exposed by all implementations
• Defines abstract methods
18
Concrete Classes(Session)
• Inherits from provider definition class• Overrides Initialize (ProviderBase)
• Config-section (<provider>) attributes received as NameValueCollection object.
• Provider-specific _Fields (defined here) and those defined in base class are filled.
• If expected attribute is not found, throw ProviderException
• Allowed attributes are removed from collection and collection is checked for anything left over.
• Abstract methods implemented
19
The Factory Class
• Point of entry
• Static constructor reads all defined providers and makes provider determination from config information
• Duplicates provider’s methods for entry
• Exposes a collection of all providers addressable by name
• Exposes default provider
20
Writing Providers
• Can be defined in separate assemblies
• Similar to the Session-State provider
• May use same, different, more, or less attributes than other providers– Has its own Initialize method implementation
• Implement abstract methods– Same, similar, or different than other providers
• Assembly needs to be accessible by host
21
Writing Providers
• Application State Provider– Like Session but uses Application variable
• Cache State Provider– Like Session but uses Cache variable
• Cookie State Provider– Like the others but must serialize and
deserialize values before storage and retrieval– Cookies only store string values
22
Using The Providers
• Define one or more in the config• Define one as the default provider• Use the default provider
• Use the StateStorage factory class to store and/or retrieve values
• Use a specific provider• Define a variable of the base class-type• Set to an element of StateStorage.Providers
using provider name as key
23
Summary
• Provider model can accommodate a terrific plug-in architecture for many features of your application
• Familiar & proven pattern
• Can be used outside of ASP.NET• Need to reference System.Web.dll
• The ability to swap state storage can come in very handy
References
www.dotnetdude.comwww.steelbluesolutions.com25
• Programming Microsoft ASP.NET Advanced Topics• Dino Esposito – Microsoft Press
• Professional ASP.NET 4.0 with C# or VB}• Mathew MacDonald - APress