Enterprise Library 3.0: What’s New? The Story So Far…  Application Blocks are reusable, extensible source-code components that provide guidance for common development challenges 

Download Report

Transcript Enterprise Library 3.0: What’s New? The Story So Far…  Application Blocks are reusable, extensible source-code components that provide guidance for common development challenges 

Enterprise Library 3.0:
What’s New?
The Story So Far…
 Application Blocks are reusable, extensible source-code
components that provide guidance for common
development challenges
 Enterprise Library is a collection of general purpose
application blocks
• Caching, Configuration, Cryptography, Data Access, Exception
Handling, Logging, Security
• Emphasis on Consistency, Extensibility, Ease of Use and
Integration
• Originally designed for .NET Framework 1.1 (January/June 2005
releases) and updated for .NET Framework 2.0 (January 2006
release)
 Enterprise Library has become a standard for .NET
development and is often used as a basis for custom
frameworks
Goals of Enterprise Library 3.0
 Address top feedback received for existing application
blocks
 Provide new application blocks to support additional
development challenges
 Support integration with relevant features of .NET
Framework 3.0
 Improve the experience around key development activities
 Simplify the development of new application blocks and
extensions
 Retain compatibility with Enterprise Library 2.0
Enterprise Library 3.0 – New Features At a
Glance
 New application blocks
• Validation Application Block
• Policy Injection Application
Block
 Improvements to existing
application blocks
• Data Access Application
Block
• Logging Application Block
 .NET Framework 3.0
integration
• Logging, Exception
Handling and Validation
Application Blocks
 Configuration
improvements
• Visual Studio-integrated
configuration tool
• Environmental Overrides
• Manageable Configuration
Source
 Automation
• Application Block Software
Factory
• Strong Naming Guidance
Package
Enterprise Library 3.0 – Application Blocks
Data
Access
Caching
Logging
Core
Plug-in
Cryptography
Config
Helpers
& Design
Instrumentation
Exception
Handling
Object
Builder
Security
Policy Injection
Validation
New Application Blocks
Validation Application Block – Goals
 Specify your validation rules once
• In configuration
• Using attributes
• Programmatically
 Easily validate data from anywhere in your application
• Programmatically
• Integrated into Windows Forms, ASP.NET or WCF
 Composable validation logic
• Built-in library of common primitive validation rules
• Combine validation rules on type members and using Boolean
logic
• Apply multiple validation rule sets to the same types
Supplied Validation Rules
 Validation Application Block includes the following rules:
• Not Null (value must not be null)
• Contains Characters (e.g. does not contain any of /\?<>”:)
• Regular Expression (e.g. value is a valid e-mail address)
• Range (e.g. must be from 10-20 or 1/1/1950 to 12/31/1999)
• Relative DateTime (e.g. birth date is more than 18 years ago)
• String Length (e.g. string is at least 8 characters long)
• Domain (e.g. must be one of {John, Paul, George, Ringo})
• Enum Conversion (e.g. string can be converted to a value in the
Color enum type)
• Type Conversion (e.g. string can be converted to a DateTime)
• Property Comparison (e.g. MaxDate > MinDate)
 All validation rules can be negated
• E.g String Length must not be between 5 and 10 characters
Composing Validation Rules
 You can build complex validation rule sets by combining
multiple primitive rules
• Combining rules with Boolean AND / OR logic
• Assigning different validators to different members of a type
• Specifying how nested objects or collections are to be validated
 A single type may have multiple rule sets that can be used
in different contexts
• For example, Valid for displaying or Valid for persisting
• For example, Valid Customer or Preferred Customer
Specifying Validation Rules using Attributes
 Attributes allow you to specify validation rules directly within the type
being validated
 Validation logic cannot be changed without recompiling
 You must own the source code of the type
[StringLengthValidator(1, 50, Ruleset="RuleSetA", MessageTemplate="Last Name must be 1-50 characters")]
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
[RegexValidator(@"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*", MessageTemplate="Invalid e-mail address",
Ruleset="RuleSetA")]
public string Email
{
get { return email; }
set { email = value; }
}
[ObjectValidator("RuleSetA", Ruleset="RuleSetA")]
public Address Address
{
get { return address; }
set { address = value; }
}
Specifying Validation Rules using
Configuration
 Validation rules are stored in XML and can be edited with the
Enterprise Library configuration tool
 Validation logic can be changed without recompiling
 You don’t need to own the source code of the type
Validating Data – Programmatically
 Regardless of how you specify rules, objects are validated
in the same way
 If validation fails, you get a collection of ValidationResult
objects
 Each result includes a message, tag, references to the
object and property being validated, and a reference to the
original validator.
Validator<Customer> validator = ValidationFactory.CreateValidator<Customer>("Ruleset");
ValidationResults results = validator.Validate(customer);
if (!results.IsValid)
{
foreach (ValidationResult result in results)
{
Console.WriteLine("Message={0}, Key={1}, "Tag={2}", result.Message,
result.Key.ToString(),
result.Tag == null ? "null" : "\"" + result.Tag.ToString() + "\"");
}
}
Integrating with WinForms, ASP.NET or WCF
 Supplied “Integration Adapters” make it easier to validate
data in UI layers and service boundaries
 Windows Forms and ASP.NET integration allow you to
associate a control with the validation rules for a particular
type and member
• Validation failures are displayed alongside the control being
validated
• Includes events for converting user input to the correct type for
validation
 WCF integration implemented as a WCF Behavior that
validates data at the service interface layer
• Rules are defined within data contract types or using attributes on
the service contract
Policy Injection Application Block - Goals
 Separate cross-cutting concerns from business logic
• Use interception and injection to apply policies at runtime
• Allow policies to be defined using configuration or attributes
 Include matching rules for common scenarios
• Applies policies at fine-grained level (searching for specific
members or attributes) or coarse-grained (all types in a
namespace or assembly)
 Include handlers that integrate with Enterprise Library to
implement common cross-cutting concerns
• Validation, Logging, Authorization, Exception Handling, Caching,
Performance Counters
 Allow users to use custom interception mechanisms
Policy Injection Application Block – Basics
 Policy Injection Application Block provides a factory for
creating or wrapping policy-enabled objects
 If policies are defined in attributes or configuration, a proxy
is returned in lieu of the real object
 When calling policy-enabled members, a handler pipeline
is executed before and after the real member is called
 Each handler can read and manipulate the data going in
and out of the call
Defining Policies
 Policies defined in configuration consist of a set of
matching rules and the definition of the handler pipeline
 Matching rules are predicates that specify which members
the policy should apply to
 Handlers can also be
applied directly to
types and members
using attributes
[ValidationCallHandler]
public void Deposit(
[RangeValidator(typeof(Decimal),
"0.0", RangeBoundaryType.Exclusive,
"0.0", RangeBoundaryType.Ignore)]
decimal depositAmount)
{
balance += depositAmount;
}
Supplied Handlers
 Validation Handler
• Validates parameters to a method using validation rules defined for
the types or as attributes attached to the parameters. If validation
fails, an exception is returned and the method is not called.
 Logging Handler
• Logs before and/or after the method is called, optionally including
the call stack, parameter values, return values, exceptions and call
execution time
 Authorization Handler
• Uses the specified Authorization provider to check if the current
user (thread principal) is authorized to perform the operation. If
authorization fails, an exception is returned and the method is not
called.
Supplied Handlers (continued)
 Exception Handling Handler
• If the method throws an exception, the exception is processed
using the Exception Handling Application Block and the returned
exception is sent back to the called
 Caching Handler
• Checks if the method has recently been called, and if so, returns
the cached return value instead of calling the method. If not, the
method is called and the return value is cached for future use
 Performance Counter Handler
• Increments a number of performance counters to measure the
number of times the method is called, the rate at which it is called,
the average call duration and the number of exceptions thrown
Improvements to Existing
Application Blocks
Data Access Application Block
 SQL Server Compact Edition provider
• New SqlCeDatabase class that integrates with the SQL CE
managed provider
 TransactionScope integration
• Prevents escalation to DTC when multiple updates are made to
the same database within a TransactionScope context
 Batch updates
• UpdateDataset now supports an updateBatch size parameter
Logging Application Block
 Rolling Flat File Trace Listener
• Automatically creates a new file based on file size or date/time
 Improved Text Formatter
• Reflected Property Token, to retrieve data out of custom LogEntry
types
• Display timestamps in local or UTC time
.NET Framework 3.0
Integration
WCF Integration
 Exception Handling Application Block
• ExceptionShieldingBehavior can be specified on a service
contract
• Calls the Exception Handling Application Block to shield
exceptions from the caller
 Logging Application Block
• EntLibLoggingProxyTraceListener can be configured to enable
the Logging Application Block to process WCF trace events
• XmlTraceListener can be used with the block to output events in
the format consumable by WCF diagnostics tools
 Validation Application Block
• ValidationBehavior can be specified on a service contract to
enable validation of data contracts
Configuration Improvements
Visual Studio-integrated Configuration Tool
 Edit configuration from within the IDE
 Launched from .config files in the Solution Explorer
 Can be configured to point to different sets of assemblies
Environmental Overrides
 Simplifies management
of configuration files
across multiple
environments
 Separates master
configuration files from
environment-specific
delta files
 Specify which settings to
override on a node-bynode basis
 Merge configuration files
using the configuration
tool or a command-line
tool
Manageable Configuration Source
 Configuration Source designed to make it easier to build
more manageable applications
 Based on the FileConfigurationSource, allowing
applications to read configuration from any .config file,
plus:
• Administrators may publish changes to applications’ configuration
using Group Policy
• The resulting merged configuration is published using WMI to
enable querying through operations tools such as Microsoft
Operations Manager
 No code changes required by developers to support this!
Automation
Application Block Software Factory
 Enterprise Library 3.0 includes a new software factory for
building your own application blocks and extensions to existing
application blocks
 Features include:
• Code generation in either C# or Visual Basic .NET
• Solution templates for Application Blocks and Provider Libraries
• Recipes to create custom providers for Enterprise Library application
blocks
Including Validators, Trace Listeners, Exception Handlers and Authorization
Providers
Strongly-typed or property bag-based configuration
• Recipes to create new factories, provider bases and providers for your
own blocks
• Recipes to create design-time configuration code from runtime
configuration classes
Application Block Software Factory
Strong Naming Guidance Package
 Strong-naming Enterprise Library is recommended, but
complex
• 90+ projects, including design-time and tests
• Use of [InternalsVisibleTo] attribute for testing
 Strong Naming Guidance Package automates:
• Generating strong-name key pairs
• Specifying that projects should be strong-named
• Updating [InternalsVisibleTo] to include public key
 Can be run on Enterprise Library or any other solution
 Enterprise Library 3.0 also ships with pre-built, strongnamed assemblies which you can use if you don’t want to
modify the code.
finally
{
Migration from previous versions
 This release is 100% API compatible with the previous
January 2006 release of Enterprise Library
 Configuration formats for existing blocks are unchanged,
but assembly version numbers and possibly public key
tokens will need to be changed
 Multiple versions of Enterprise Library can be installed on
the same machine, but cannot be used together in the
same application
 Enterprise Library 3.0 can be used with either .NET
Framework 2.0 or .NET Framework 3.0 installed
• WCF-specific functionality requires .NET Framework 3.0
Resources
 Download Enterprise Library and related resources from:
• http://msdn.microsoft.com/practices
 Join the Enterprise Library Community at:
• http://codeplex.com/entlib
 Read blogs from the Enterprise Library team at:
• http://msdn.microsoft.com/practices/Comm/EntLibBlogs/