<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://bloggingabout.net/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">^(?:[^$]*)$ --Matches everything, captures nothing</title><subtitle type="html">Thoughts that compile to MSIL by Olaf Conijn</subtitle><id>http://bloggingabout.net/blogs/olaf/atom.aspx</id><link rel="alternate" type="text/html" href="http://bloggingabout.net/blogs/olaf/default.aspx" /><link rel="self" type="application/atom+xml" href="http://bloggingabout.net/blogs/olaf/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30619.63">Community Server</generator><updated>2007-01-13T17:32:00Z</updated><entry><title>Celebrating my birthday at TechEd Barcelona</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/10/18/celebrating-my-birthday-at-teched-barcelona.aspx" /><id>/blogs/olaf/archive/2007/10/18/celebrating-my-birthday-at-teched-barcelona.aspx</id><published>2007-10-17T22:17:13Z</published><updated>2007-10-17T22:17:13Z</updated><content type="html">&lt;p&gt;Yes - I&amp;#39;ll be at TechEd 07.&lt;/p&gt; &lt;p&gt;Yes - My birthday is November 5th.&lt;/p&gt; &lt;p&gt;No - That doesn&amp;#39;t bother me.&lt;/p&gt; &lt;p&gt;Yes - You are invited!&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://bloggingabout.net/blogs/olaf/WindowsLiveWriter/CelebratingmybirthdayatTechEdBarcelona_374/Teched%20Birthday%20party_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="502" alt="Teched Birthday party" src="http://bloggingabout.net/blogs/olaf/WindowsLiveWriter/CelebratingmybirthdayatTechEdBarcelona_374/Teched%20Birthday%20party_thumb.jpg" width="755" border="0" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Let us know whether you are coming (send me an email with your name and the number of people you plan to take with you).&lt;/p&gt; &lt;p&gt;We&amp;#39;ll drop you a note on what we are up to, the weekend before. Hopefully weather is good and the flyer isn&amp;#39;t a bad approximation :-).&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=398908" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="TechEd 07 Barcelona Birthday party" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/TechEd+07+Barcelona+Birthday+party/default.aspx" /></entry><entry><title>Announcing the *European* Service Factory Customization Workshop! (held 14-15-16 November in The Netherlands)</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/10/12/announcing-the-european-service-factory-customization-workshop-held-14-15-16-november-in-the-netherlands.aspx" /><id>/blogs/olaf/archive/2007/10/12/announcing-the-european-service-factory-customization-workshop-held-14-15-16-november-in-the-netherlands.aspx</id><published>2007-10-12T18:01:59Z</published><updated>2007-10-12T18:01:59Z</updated><content type="html">&lt;p&gt;You might have read about the &lt;a title="Service Factory Customization Workshop" href="http://blogs.msdn.com/donsmith/archive/2007/07/16/service-factory-customization-workshop.aspx"&gt;Service Factory Customization Workshop&lt;/a&gt; held on Microsofts campus, the end of July.&lt;/p&gt; &lt;p&gt;Since we know a large portion of the Service Factory community is based in Europe, &lt;a href="http://blogs.msdn.com/donsmith" target="_blank"&gt;Don Smith&lt;/a&gt; and myself are doing a second workshop in &lt;a href="http://blogs.msdn.com/jezzsa/archive/2007/04/24/what-is-it-with-the-netherlands.aspx" target="_blank"&gt;The Netherlands&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;This workshop will be similar to the workshop previously held in Redmond. The emphasis is definitely on learning about all the technologies &amp;quot;hands on&amp;quot;. Little slideware and lots of fun.&lt;/p&gt; &lt;p&gt;Also, a lot of thanks to the good people at &lt;a href="http://www.infosupport.nl/" target="_blank"&gt;Infosupport&lt;/a&gt; who allowed us to use their facilities for the workshop.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;b&gt;European Service Factory Customization Workshop &lt;/b&gt; &lt;p&gt;A 3 day workshop on Service Factury customization, 14-15-16 november, the Netherlands.  &lt;p&gt;Kruisboog 42&lt;br /&gt;3905 TG Veenendaal&lt;br /&gt;Netherlands&lt;br /&gt;Tel. +31(0)318 - 50 11 19&lt;br /&gt;Fax +31(0)318 - 51 83 59  &lt;p&gt;&lt;a href="http://maps.live.com/default.aspx?v=2&amp;amp;cp=sp65hxhfv54b&amp;amp;style=o&amp;amp;lvl=2&amp;amp;tilt=-90&amp;amp;dir=0&amp;amp;alt=-1000&amp;amp;scene=15565712&amp;amp;encType=1"&gt;Click here to view the location in Virtual Earth&lt;/a&gt;  &lt;p&gt;&lt;b&gt;Description &lt;/b&gt; &lt;p&gt;Many software factories being built today use a number of different technologies, which include the Guidance Automation Extensions (GAX), the Domain Specific Language (DSL) Toolkit, Visual Studio extensibility components, and a few other additional utilities. This is definitely true for the Web Service Software Factory: Modeling Edition. Much of the feedback we’ve received about these technologies, with regard to building and modifying software factories, revolves around the difficulty of customizing them. More than 40% of all users of the Service Factory will change it in some way before using it to build Web services. Typically, this is done to specialize it for some additional requirement or customize it towards a specific customer domain (i.e. industry vertical). Requiring development teams to know these technologies at any technical depth, beyond what the factory itself provides, justifies any effort to make the customizations as easy as possible.&lt;br /&gt;This 3 day workshop will walk you through the comprehensive process of adding a new model (an entity model) to the Service Factory: Modeling Edition. You will become very familiar will all aspects of the factory infrastructure: DSL models, recipe automation, model validation, cross-model references, model views, project mapping, technology extenders, code generation, and factory deployment. Because the workshop will be hosted by members of the Service Factory team and other Software Factory experts, you will also have the opportunity to ask questions, and get a glimpse into the future of the software factory platform.  &lt;p&gt;&lt;b&gt;Purpose &lt;/b&gt; &lt;ul&gt; &lt;li&gt;Transfer knowledge from factory experts to attendees about building software factories on today’s technologies with insights on how these technologies are changing in the future.  &lt;li&gt;Transfer knowledge from the attendees to factory experts about the most important and common types of modifications necessary to build other software factories. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;Prerequisites &lt;/b&gt; &lt;ul&gt; &lt;li&gt;This should be considered an advanced workshop. It is highly recommended you have a working knowledge of GAX and the DSL toolkit. There will be some introductory content around the technologies, but there will be a heavy focus on writing C# source code. It is recommended you have reviewed the source code of the Service Factory : Modeling edition, which can be found at &lt;a href="http://www.codeplex.com/servicefactory"&gt;www.codeplex.com/servicefactory&lt;/a&gt;.  &lt;li&gt;You must bring a laptop and a VPC will be provided. If you can have Microsoft Virtual PC installed ahead of time, it will save you from having to install it after you arrive. This will prevent you from having any other system requirements on the machine.  &lt;li&gt;If you plan on attending, please have a number of changes you would like to make to the factory in mind. One of the main reasons we’re hosting this workshop is to be sure we understand what the most common and important customizations are (so we can make it as easy as possible). We will ask you to define your scenarios at some point while you are here. &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;Agenda &lt;/b&gt; &lt;ul&gt; &lt;li&gt;DSL modeling  &lt;li&gt;Recipe automation (GAX)  &lt;li&gt;Model validation  &lt;li&gt;Cross-model references  &lt;li&gt;Model views (tool windows)  &lt;li&gt;Implementation project mapping  &lt;li&gt;Technology extenders  &lt;li&gt;Code generation framework  &lt;li&gt;Factory deployment  &lt;li&gt;Factory futures &lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;Cost &lt;/b&gt; &lt;ul&gt; &lt;li&gt;There is no registration fee for the workshop.  &lt;li&gt;Attendees are responsible for making and paying for their own travel to and from the training facilities.  &lt;li&gt;Attendees are responsible for their lodging accommodations during the workshop. &lt;br /&gt;The suggested accommodation is: &lt;b&gt;Ibis Veenendaal&lt;/b&gt; &lt;a href="http://www.ibishotel.com/ibis/fichehotel/gb/ibi/0648/fiche_hotel.shtml"&gt;http://www.ibishotel.com/ibis/fichehotel/gb/ibi/0648/fiche_hotel.shtml&lt;/a&gt;  &lt;li&gt;Lunch will be provided on all 3 days.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;b&gt;Registering &lt;/b&gt; &lt;p&gt;Please follow the &lt;a href="http://www.infosupport.nl/Training/CursusInfo?CourseCode=serfac"&gt;registration link&lt;/a&gt; (in dutch) to complete your registration for the event. &lt;br /&gt;Alternatively you can send an email to &lt;a href="mailto:training.nl@infosupport.com"&gt;training.nl@infosupport.com&lt;/a&gt; and specify the following information  &lt;p&gt;· Full name  &lt;p&gt;· Company name  &lt;p&gt;· Email address  &lt;p&gt;· Whether a vegetarian lunch is required.  &lt;p&gt;Registration is based on a first come, first serve basis.  &lt;p&gt;Please email either Don (&lt;a href="mailto:don.smith@microsoft.com"&gt;don.smith@microsoft.com&lt;/a&gt;) or Olaf (&lt;a href="mailto:v-olconi@microsoft.com"&gt;v-olconi@microsoft.com&lt;/a&gt;) if you have any questions with regards to the contents of the workshop. Please email Info Support (&lt;a href="mailto:training.nl@infosupport.com"&gt;training.nl@infosupport.com&lt;/a&gt;) if you have questions related to registration or facilities.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=393861" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Service Factory" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Service+Factory/default.aspx" /><category term="Software Factory" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Software+Factory/default.aspx" /><category term="Workshop" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Workshop/default.aspx" /><category term="Customization" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Customization/default.aspx" /></entry><entry><title>5 reasons to download the EntLib Contrib September 2007 release</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/10/02/5-reasons-to-download-the-entlib-contrib-september-2007-release.aspx" /><id>/blogs/olaf/archive/2007/10/02/5-reasons-to-download-the-entlib-contrib-september-2007-release.aspx</id><published>2007-10-02T09:44:00Z</published><updated>2007-10-02T09:44:00Z</updated><content type="html">&lt;p&gt;This morning I woke up to &lt;a href="http://blogs.msdn.com/tomholl/archive/2007/10/02/entlib-contrib-september-2007-release.aspx" target="_blank"&gt;Tom&amp;#39;s announcement on the new EntLib Contrib release.&lt;/a&gt; No big surprises for me personally, since we have been working on this release together for quite some while. Tom actually picked up where I left it, when I went to sleep (and Tom woke up and got to work). Hooray for redundancy across time zones!&lt;/p&gt;
&lt;p&gt;On the &lt;a href="http://www.codeplex.com/entlibcontrib" target="_blank"&gt;project homepage&lt;/a&gt; you can find a list of all extensions, in this post you find 5 reasons to go and &lt;a href="http://www.codeplex.com/entlibcontrib/Release/ProjectReleases.aspx?ReleaseId=7302" target="_blank"&gt;download it now&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason #1&lt;/strong&gt;: You have a need to translate SQL Server error codes (2601 - Primary Key violation, 547 Foreign Key violation, etc.) to .NET Exceptions. &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://blogs.msdn.com/tomholl/archive/2007/08/01/mapping-sql-server-errors-to-net-exceptions-the-fun-way.aspx" target="_blank"&gt;SqlException Wrap Handler&lt;/a&gt; can do this job for you!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason #2&lt;/strong&gt;: Every once in a while you are annoyed by Enterprise Libraries configuration console, since it&amp;#39;s Type Selector doesn&amp;#39;t work well when hosted inside Visual Studio. &lt;/p&gt;
&lt;p&gt;We fixed this in the &lt;a href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=Lightweight%20Type%20Picker" target="_blank"&gt;Lightweight Type Selector&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason #3: &lt;/strong&gt;You&amp;#39;ve been having runtime exceptions or other issues when using the Validation Application Block, because you simply didn&amp;#39;t test your validators using all possibly inputs or cultures.&lt;/p&gt;
&lt;p&gt;You can now play around and test your validators, using the &lt;a href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=Test%20Command%20for%20Validation%20Rules" target="_blank"&gt;Test Command for Validation Rules&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason #4: &lt;/strong&gt;You need more general purpose validation rules to go with the Validation Application Block. Such as (personal favorite) the ExternallyConfigurableObjectValidator (which allows for nested validation and configuration in a file other than web.config or app.config).&lt;/p&gt;
&lt;p&gt;Check out &lt;a href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=VAB%20Contributions" target="_blank"&gt;these validators&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reason #5&lt;/strong&gt;: You need more Policy Injection Call Handlers for the Policy Injection Application Block. Allow me to introduce you to: &lt;strong&gt;CursorCallHandler, OneWayCallHandler, SynchronizedCallHandler, ThreadSafeCallHandler, TransactionScopeCallHandler.&lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;(these are unfortunately not documented on the wiki yet, but browsing through the &lt;a href="http://www.codeplex.com/entlibcontrib/Thread/List.aspx" target="_blank"&gt;discussions page&lt;/a&gt; might help you get an idea on what these are all about)&lt;/p&gt;
&lt;p&gt;oh, and &lt;strong&gt;reason #6&lt;/strong&gt; is that it contains all the previous release contained!&lt;/p&gt;
&lt;p&gt;meanwhile even more contributors joined to project and are willing to share their extensions with every single one of us. &lt;strong&gt;Yay!&lt;/strong&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=382656" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /><category term="EntLibContrib" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/EntLibContrib/default.aspx" /></entry><entry><title>Lots of cool stuff to look forward to in the Enterprise Library community!</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/08/25/lots-of-cool-stuff-to-look-forward-to-in-the-enterprise-library-community.aspx" /><id>/blogs/olaf/archive/2007/08/25/lots-of-cool-stuff-to-look-forward-to-in-the-enterprise-library-community.aspx</id><published>2007-08-25T14:43:00Z</published><updated>2007-08-25T14:43:00Z</updated><content type="html">&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a title="Yup, Grigori has the coolest weblog url on msdn!" href="http://blogs.msdn.com/Agile"&gt;&lt;span style="COLOR:blue;"&gt;&lt;font face="Calibri"&gt;Grigori Melnik&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;&amp;nbsp;( yeah, you know... Tom++ ) is &lt;/font&gt;&lt;a href="http://blogs.msdn.com/agile/archive/2007/08/24/planning-the-next-release-of-enterprise-library.aspx"&gt;&lt;span style="COLOR:blue;"&gt;&lt;font face="Calibri"&gt;planning a new Enterprise Library release for Visual Studio Orca&amp;#39;s&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;. &lt;b&gt;Yay!&lt;/b&gt;&lt;/font&gt;&lt;/span&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;From Grigori&amp;#39;s weblog:&lt;br /&gt;&lt;b&gt;&lt;i&gt;We, at patterns &amp;amp; practices, are planning a&amp;nbsp;release of Enterprise Library for Visual Studio 2008 (Orcas). It will happen at around the same time Visual Studio 2008 is out (Feb 2008 as per our &lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a title="roadmap" href="http://msdn2.microsoft.com/en-us/practices/bb232643.aspx"&gt;&lt;b&gt;&lt;i&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;roadmap&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&gt;&lt;b&gt;&lt;i&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;). At a minimum, you can expect the current functionality ported to Orcas.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;[&lt;strong&gt;Update&lt;/strong&gt;: please fill out the questionaire at: &lt;a class="" title="Enterprise Library for Orca&amp;#39;s questionaire" href="http://www.zoomerang.com/survey.zgi?p=WEB226STCU2528" target="_blank"&gt;http://www.zoomerang.com/survey.zgi?p=WEB226STCU2528&lt;/a&gt;]&lt;/p&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Calibri"&gt;&lt;span&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Meanwhile, the &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a href="http://www.codeplex.com/entlibcontrib" target="_blank"&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;Enterprise Library Contrib&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; continues to grow... &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;There is a list of functionality on the project&amp;#39;s homepage that has been added since the the &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a title="EntLibContrib July" href="http://bloggingabout.net/blogs/olaf/archive/2007/07/17/enterprise-library-contrib-july-2007-get-it-while-its-hot.aspx" target="_blank"&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;first (July 07) release&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;besides which &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a href="http://www.codeplex.com/UserAccount/UserProfile.aspx?UserName=francois_tanguay" target="_blank"&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;Francois Tanguay&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;has been dominating our &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a title="Downloadable Commits for EntLibContrib" href="http://www.codeplex.com/entlibcontrib/SourceControl/ListDownloadableCommits.aspx" target="_blank"&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;Source Code check-in list&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; recently, adding all sorts of cool little updates.&lt;/span&gt;&lt;/font&gt; 
&lt;p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;i&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;(note to self: I&amp;#39;ll update the homepage shortly, to include Francois&amp;#39; additions).&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;br /&gt;&lt;font face="Calibri"&gt;Tom and I will be packaging&amp;nbsp;all of the stuff that&amp;nbsp;we&amp;#39;ve&amp;nbsp;collected on CodePlex over the last 2 months, in order to do a new release in the first 2 weeks of September. &lt;b&gt;Yay #2!&lt;/b&gt;&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;Keep watching this space, the &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a title="Enterprise Library Contrib" href="http://www.codeplex.com/entlibcontrib" target="_blank"&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;Contrib project&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;, &lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;a title="Grigori&amp;#39;s Weblog" href="http://blogs.msdn.com/agile"&gt;&lt;span style="COLOR:blue;mso-ansi-language:EN-US;"&gt;Grigori&amp;#39;s weblog&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt; and offcourse&amp;nbsp;&lt;span style="COLOR:blue;"&gt;&lt;a title="Tom Hollander&amp;#39;s Weblog" href="http://blogs.msdn.com/TomHoll" target="_blank"&gt;&lt;span style="COLOR:blue;"&gt;Tom Hollanders&amp;#39; weblog&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&amp;nbsp;for more updates along the way.&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Calibri"&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="FONT-SIZE:12pt;mso-ansi-language:EN-US;mso-fareast-language:NL;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;"&gt;&lt;font face="Calibri"&gt;If you are part of the Contrib community and have questions w/ regards to the September release, feel free to contact either &lt;/font&gt;&lt;a title="me @ CodePlex" href="http://www.codeplex.com/UserAccount/UserProfile.aspx?UserName=OlafConijn" target="_blank"&gt;&lt;span style="COLOR:blue;"&gt;&lt;font face="Calibri"&gt;me&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;font face="Calibri"&gt; or &lt;/font&gt;&lt;a title="Tom @ CodePlex" href="http://www.codeplex.com/UserAccount/UserProfile.aspx?UserName=tomhollander" target="_blank"&gt;&lt;span style="COLOR:blue;"&gt;&lt;font face="Calibri"&gt;Tom&lt;/font&gt;&lt;/span&gt;&lt;/a&gt;&lt;font face="Calibri"&gt;&amp;nbsp;over CodePlex.&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=347840" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /><category term="EntLibContrib" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/EntLibContrib/default.aspx" /></entry><entry><title>Enterprise Library Contrib July 2007 - Get it while its hot!</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/07/17/enterprise-library-contrib-july-2007-get-it-while-its-hot.aspx" /><id>/blogs/olaf/archive/2007/07/17/enterprise-library-contrib-july-2007-get-it-while-its-hot.aspx</id><published>2007-07-17T04:41:00Z</published><updated>2007-07-17T04:41:00Z</updated><content type="html">&lt;p&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;After having hosted the &lt;a class="" title="codeplex.com/entlibcontrib" href="http://www.codeplex.com/entlibcontrib" target="_blank"&gt;EntlibContrib project&lt;/a&gt; for a couple of months now, I believe we have come to a point at which we have reached critical mass and provide good value over &lt;a class="" title="codeplex.com/entlib" href="http://www.codeplex.com/entlib" target="_blank"&gt;Enterprise Library&lt;/a&gt; (we even managed to fix some issues that where logged in the Enterprise Libraries issue tracker on codeplex!).&lt;/span&gt;&lt;/p&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;From this point on we will try to release every couple of months, including new contributions or bug-fixes to the previously released extensions.&lt;br /&gt;&lt;br /&gt;Unfortunately, we do not have a testing team for the contributions project. We basically count on your feedback within &lt;a class="" title="EntLibContrib Issue tracker" href="http://www.codeplex.com/entlibcontrib/WorkItem/List.aspx" target="_blank"&gt;our issue tracker&lt;/a&gt; as a means of quality assurance&lt;/span&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:Wingdings;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;span style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;J&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt; .&lt;/span&gt;&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;I would like to thank &lt;a class="" title="EntLibContrib: List of contributors" href="http://www.codeplex.com/entlibcontrib/Project/ProjectPeople.aspx"&gt;all the contributors&lt;/a&gt; that have been so kind to share their extensions to Enterprise Library in this release. Feel free to &lt;a class="" title="EntLibContrib Singup process" href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=Sign%20Up%20Process&amp;amp;referringTitle=Home" target="_blank"&gt;follow their good example&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;This &lt;a class="" title="Enterprise Library Contrib July 2007" href="http://www.codeplex.com/entlibcontrib/Release/ProjectReleases.aspx?ReleaseId=5833"&gt;first release of Enterprise Library Contrib&lt;/a&gt; contains the following:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;a class="" href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=PostSharp4EntLib&amp;amp;referringTitle=Home" target="_blank"&gt;PostSharp4EntLib&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; - Combines the benefits of the Enterprise Library Policy Injection and of compile-time weaving by removing the limitations due to the use of remoting proxies. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;a class="" href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=LogParser&amp;amp;referringTitle=Home" target="_blank"&gt;LogParser&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; - Combines the benefits of the Enterprise Library Logging Application Block with the ability to deserialize from a human readable log text file all LogEntry objects back. This enables sophisticated log filter capabilities with LINQ on normal log files (.NET 2.0 and Orcas samples) with very few lines of code. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;MySql for DAAB&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; - MySql provider for the Data Access Application Block. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;SqlLite for DAAB&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; - SqlLite provider for the Data Access Application Block. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Additional PIAB Matching Rules&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;And Matching Rule&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;: Combines 2 Matching Rules and evaluates to &amp;quot;true&amp;quot; only if both of contained Matching Rules evalute to &amp;quot;true&amp;quot;.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;Or Matching Rule&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;: Combines 2 Matching Rules and evaluates to &amp;quot;true&amp;quot; if either one of contained Matching Rules evalutes to &amp;quot;true&amp;quot;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;Not Matching Rul&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;e: Contains another Matching Rules and evaluates to &amp;quot;true&amp;quot; if the contained Matching Rules evalutes to &amp;quot;false&amp;quot;. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Additional VAB Validators&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;Externally Configurable Object Validator&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;: An Object Validator that allows to use configuration from a configuration file other than web.config or app.config. &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Designtime Enhancements&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/b&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;Lightweigth type-picker for VAB&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;: An alternative type-picker for the validation application block that allows you to enter a typename in a text-box (instead of using the tree-view to navigate the whole lot of types in the current appdomain).&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;a class="" href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=Extended%20SQL%20Data%20Access%20Block&amp;amp;referringTitle=Home" target="_blank"&gt;Extended SQL Data Access Block&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="mso-ansi-language:EN-US;"&gt; - This data access application block extends the SQL Data Access Block provided by Enterprise Library. It provides additional overloads for the UpdateDataSet method so that a collection of rows or a table can be passed to the DataAdapter for update. These methods were developed to support updating datasets that have multiple tables and cascading hierarchies.&lt;/span&gt;&lt;/font&gt;&lt;/font&gt; 
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=316996" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Contains code" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Contains+code/default.aspx" /><category term="Contains downloads" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Contains+downloads/default.aspx" /><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /><category term="EntLibContrib" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/EntLibContrib/default.aspx" /></entry><entry><title>Paranoid Programmers</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/06/16/paranoid-programmers.aspx" /><id>/blogs/olaf/archive/2007/06/16/paranoid-programmers.aspx</id><published>2007-06-16T13:11:00Z</published><updated>2007-06-16T13:11:00Z</updated><content type="html">&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Most people should be familiar with the&amp;nbsp;term “defensive programming”. It’s a way of writing code, in which the default mode is to explicitly check &lt;strong&gt;all&lt;/strong&gt; assumptions you have in mind while writing logic (most of the time throwing exceptions to the caller).&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Though, when does this make sense? &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;Assume you are developing a framework, application host or plug-in to an application host. How sure are you all the assumptions you have in mind hold, once having released whatever you are working on “out in the wild”? &lt;br /&gt;&lt;br /&gt;What if a “friendly hacker” wants to exploit some unforeseen extensibility point in your framework, making it do cool stuff beyond something you thought was possible… would that be gain or loss in value for your framework? &lt;br /&gt;Think of all the mash-ups people made against google maps, flicker, whatever web 2.0 stuff is out there. Or extensions made to “application hosts” such as the Visual Studio Shell (&lt;a class="" title="Announcing the Visual Studio 2008 Shell" href="http://blogs.msdn.com/vsxteam/archive/2007/06/05/Announcing-the-Visual-Studio-2008-Shell.aspx" target="_blank"&gt;soon to be released and positioned as a true&amp;nbsp;application host&lt;/a&gt;!). &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 10pt;"&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;My default mode is different: I won’t check assumptions I have when coding, “unless …”:&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;- I am exposing some surface of an application to whomever (for instance a public service boundary, user input, whatever “unfriendly hackers” could exploit to do bad things).&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:EN-US;"&gt;&lt;font size="3"&gt;&lt;font face="Calibri"&gt;- I am shielding from&amp;nbsp;conditions that simply cannot be handled gracefully (and will throw an exception anyways). Most of which can be done through basic parameter guarding.&lt;br /&gt;&lt;br /&gt;-Etc&lt;/font&gt;&lt;/font&gt;&lt;/span&gt; 
&lt;p&gt;&lt;span style="FONT-SIZE:11pt;LINE-HEIGHT:115%;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-theme-font:minor-bidi;mso-fareast-font-family:Calibri;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-fareast-theme-font:minor-latin;mso-bidi-language:AR-SA;"&gt;When exposing a public API I’d love to have people do whatever they think makes sense. &lt;br /&gt;&lt;strong&gt;In return, whatever I expose meets some basic assumptions, around stuff like thread-safety, security and in general its behaviour (implied through convention&amp;nbsp;or somehow more explicit). &lt;br /&gt;&lt;/strong&gt;If something is not thread-safe or possibly unsecure it should not be part of the public API.&lt;br /&gt;&lt;br /&gt;Example would be a pattern such as:&lt;br /&gt;FooBar foo = bar.GetContextualSomething() as FooBar;&lt;br /&gt;if (foo != null) // whatever ContextualSomething I get back, my logic only applies on a FooBar&lt;br /&gt;{&lt;br /&gt;foo.DoStuff();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;I agree that having an API that works regardless of how it is called wouldn&amp;#39;t make sense either, though the consumers of a framework know the problem they are trying to solve best. So why not give them the benefit of doubt?&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=255298" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Architecture" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Architecture/default.aspx" /></entry><entry><title>EntLibContrib, lets extend Enterprise Library *together*!</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/05/11/entlibcontrib-lets-extend-enterprise-library-together.aspx" /><id>/blogs/olaf/archive/2007/05/11/entlibcontrib-lets-extend-enterprise-library-together.aspx</id><published>2007-05-11T04:22:00Z</published><updated>2007-05-11T04:22:00Z</updated><content type="html">&lt;P&gt;A&amp;nbsp;couple of weeks ago the "Enterprise Library Contrib" project was published on CodePlex (&lt;A href="http://www.codeplex.com/EntLibContrib"&gt;www.codeplex.com/EntLibContrib&lt;/A&gt;). Meanwhile a couple of &lt;A href="http://www.codeplex.com/entlibcontrib/Project/ProjectPeople.aspx"&gt;cool people&lt;/A&gt; joined the project, with intent to share&amp;nbsp;and collaborate on&amp;nbsp;the extensions they've made to EntLib.&lt;BR&gt;&lt;BR&gt;Currently, 2 extensions have already been commited to the sourcecode; the &lt;A href="http://bloggingabout.net/blogs/olaf/archive/2007/04/23/some-additional-piab-matchingrules-err-operators.aspx"&gt;"additional matchingrules" for PIAB&lt;/A&gt; and MySql support for DAAB.&lt;BR&gt;&lt;BR&gt;If there is anything you would like to share, don't hessitate to &lt;A href="http://www.codeplex.com/entlibcontrib/Wiki/View.aspx?title=Sign%20Up%20Process&amp;amp;referringTitle=Home"&gt;sign up&lt;/A&gt;! as for now I am really curious as to how this works out.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=195483" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /><category term="EntLibContrib" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/EntLibContrib/default.aspx" /></entry><entry><title>Some additional PIAB MatchingRules (err.. operators?)</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/04/23/some-additional-piab-matchingrules-err-operators.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="50629" href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.17.25.17/PolicyInjection.AdditionalMatchingRules.zip" /><id>/blogs/olaf/archive/2007/04/23/some-additional-piab-matchingrules-err-operators.aspx</id><published>2007-04-23T05:02:00Z</published><updated>2007-04-23T05:02:00Z</updated><content type="html">&lt;P&gt;Even though the Validation&amp;nbsp;Application Block supports extensive composition of validation rules (using And and Or 'operators' and the Negated property) PIAB doesnt. &lt;BR&gt;&lt;BR&gt;PIAB Matchingrules are always composed using an "AND" operator &lt;EM&gt;(Namespace is 'BusinessLogic.Actions' &lt;STRONG&gt;and&lt;/STRONG&gt; Tag is 'ShouldBeAudited')&lt;/EM&gt;. &lt;BR&gt;Additionally, the matchingrules themselves often contain a collection of matches that should help you to do composition such as &lt;EM&gt;((Namespace is 'BusinessLogic.Actions'&amp;nbsp;&lt;STRONG&gt;or &lt;/STRONG&gt;'BusinessLogic.Services')&amp;nbsp;&lt;STRONG&gt;and&lt;/STRONG&gt; Tag is 'ShouldBeAudited')&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;Fair enough, that seems pretty straightforward and allows for a fair amount of composition logic. &lt;BR&gt;Though I ran in a situation a &lt;STRONG&gt;Not &lt;/STRONG&gt;operator was desired. &lt;EM&gt;(Type is 'Foo' &lt;STRONG&gt;and not&lt;/STRONG&gt; Method is 'Bar'), &lt;/EM&gt;decided to add this and, for sake of completeness add the designtime for it (and do the same for &lt;STRONG&gt;OR &lt;/STRONG&gt;and &lt;STRONG&gt;AND&lt;/STRONG&gt;-operators).&lt;/P&gt;&lt;IMG src="http://bloggingabout.net/photos/olaf_conijn/images/172512/original.aspx"&gt;&lt;BR&gt;&lt;BR&gt;I ran into this when trying to automate the creation of PIAB policies (and their matchingrules). Which probably isnt a typicial usage scenario, fair enough.&lt;BR&gt;&lt;BR&gt;Still,&amp;nbsp;if you find yourself in the need of these types of MatchingRules, feel free to re-use mine (both sourcecode and a binary copy&amp;nbsp;are attached). &lt;BR&gt;&lt;STRONG&gt;The binaries are compiled against an unsigned&amp;nbsp;version of EntLib.&lt;/STRONG&gt; Please read &lt;A href="http://blogs.msdn.com/tomholl/archive/2007/04/19/avoiding-configuration-pitfalls-with-incompatible-copies-of-enterprise-library.aspx"&gt;Tom's post on compatibility issues&lt;/A&gt;, before sticking those in EntLib's installation directory.&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=172517" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Contains downloads" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Contains+downloads/default.aspx" /><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /><category term="Policy Injection Application Block" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Policy+Injection+Application+Block/default.aspx" /></entry><entry><title>Creating cool DSL Shapes using GDI and Fonts</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/04/23/creating-cool-dsl-shapes-using-gdi-and-fonts.aspx" /><id>/blogs/olaf/archive/2007/04/23/creating-cool-dsl-shapes-using-gdi-and-fonts.aspx</id><published>2007-04-23T02:17:00Z</published><updated>2007-04-23T02:17:00Z</updated><content type="html">&lt;P&gt;The DSL Toolkit knows a concept called shape (the thing that represents an element and is drawn on the modeling surface) and allows to define these shapes in 3 basic flavors:&lt;BR&gt;&lt;BR&gt;1.)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;Geometry Shapes&lt;/STRONG&gt;. Either a Rectangle, Rounded rectangle, Ellipse or Circle&lt;BR&gt;2.)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;Image Shapes&lt;/STRONG&gt;. An imported image&lt;BR&gt;3.)&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;Compartment Shapes&lt;/STRONG&gt;. Either a Rectangle or Rounded rectangle which contains compartments.&lt;/P&gt;
&lt;P&gt;The “Geometry shape” has some advantages over the “Image shape”, it can be scaled and its style can be configured. The Geometry shape also features a shadow and cool highlight when hovering over it. &lt;BR&gt;Geometry shapes are slightly harder to customize, though.... You should draw them in code using GDI.&lt;/P&gt;
&lt;P&gt;Now, if you want to create your own geometry shapes it might be worth your while to have a look at some of the fonts (especially wingdings or webdings) on your system. &lt;BR&gt;GDI you to import the structure of these fonts and draw them on a surface (DSL model?).&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://bloggingabout.net/photos/olaf_conijn/images/172165/original.aspx"&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN&gt;The way this works is:&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;&lt;BR&gt;1.) Place a “Geometry Shape” on your Dsl designer (mine is called “&lt;STRONG&gt;AlienShape&lt;/STRONG&gt;”).&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;2.) In the property grid, Specify that a double derived class should be generated and set the Geometry property to “Circle”. &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN&gt;3.) After transforming the templates you should be able to derive from a class called “AlienShapeBase” and override its &lt;B&gt;ShapeGeometry &lt;/B&gt;property to return your own.&lt;/SPAN&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; partial &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;class&lt;/SPAN&gt; AlienShape : AlienShapeBase&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;override&lt;/SPAN&gt; Microsoft.VisualStudio.Modeling.Diagrams.ShapeGeometry ShapeGeometry&lt;BR&gt;{&lt;BR&gt;get&lt;BR&gt;{&lt;BR&gt;&lt;STRONG&gt;FontShapeGeometry&lt;/STRONG&gt; myShape &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; &lt;STRONG&gt;FontShapeGeometry&lt;/STRONG&gt;();&lt;BR&gt;myShape.CharCode &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; (&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;char&lt;/SPAN&gt;)0x85;&lt;BR&gt;myShape.FontName &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"Webdings"&lt;/SPAN&gt;;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;return&lt;/SPAN&gt; myShape;&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;}&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;SPAN&gt;The &lt;STRONG&gt;FontShapeGeometry &lt;/STRONG&gt;class uses the specified character and font to import this in a GDI structure, then manipulate it to fit your shape.&lt;BR&gt;The implementation below, stretches the character to a Rectangularal shape. Since we derive from RectangleShapeGeomtery all the hit-testing, grabhandles, zooming and scaling should already be taken care of.&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;class&lt;/SPAN&gt; FontShapeGeometry : RectangleShapeGeometry&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;char&lt;/SPAN&gt; c;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;char&lt;/SPAN&gt; CharCode&lt;BR&gt;{&lt;BR&gt;get { &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;return&lt;/SPAN&gt; c; }&lt;BR&gt;set { c &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; value; }&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; fontName;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;string&lt;/SPAN&gt; FontName&lt;BR&gt;{&lt;BR&gt;get { &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;return&lt;/SPAN&gt; fontName; }&lt;BR&gt;set { fontName &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; value; }&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;override&lt;/SPAN&gt; System.Drawing.Drawing2D.GraphicsPath GetPath(IGeometryHost geometryHost)&lt;BR&gt;{&lt;BR&gt;RectangleF targetRect &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; RectangleD.ToRectangleF(geometryHost.GeometryBoundingBox);&lt;BR&gt;&lt;BR&gt;GraphicsPath path &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;base&lt;/SPAN&gt;.UninitializedPath;&lt;BR&gt;path.Reset();&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;//draw the character in the GrpahicsPath on 1.1&lt;/SPAN&gt;&lt;BR&gt;path.AddString(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; String(c, 1), &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; FontFamily(FontName), 1, 1, &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; RectangleF(0, 0, targetRect.Width, targetRect.Height), StringFormat.GenericDefault);&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;//Calculate the bounds of the drawn character, calculate whether we should scale it.&lt;/SPAN&gt;&lt;BR&gt;RectangleF currentBounds &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; path.GetBounds();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;float&lt;/SPAN&gt; scaleX &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; targetRect.Width &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;/&lt;/SPAN&gt; currentBounds.Width;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;float&lt;/SPAN&gt; scaleY &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; targetRect.Height &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;/&lt;/SPAN&gt; currentBounds.Height;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;//Scale it&lt;/SPAN&gt;&lt;BR&gt;Matrix scaleTransform &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; Matrix();&lt;BR&gt;scaleTransform.Scale(scaleX, scaleY);&lt;BR&gt;path.Transform(scaleTransform);&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;//Calculate the bounds of the scaled character, calculate the offset and apply this.&lt;/SPAN&gt;&lt;BR&gt;currentBounds &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; path.GetBounds();&lt;BR&gt;Matrix translationTransform &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; Matrix();&lt;BR&gt;translationTransform.Translate(targetRect.Left &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;-&lt;/SPAN&gt; currentBounds.Left, targetRect.Top &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;-&lt;/SPAN&gt; currentBounds.Top);&lt;BR&gt;path.Transform(translationTransform);&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:green;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;//return the path.&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;return&lt;/SPAN&gt; path;&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;&lt;IMG src="http://bloggingabout.net/photos/olaf_conijn/images/172173/original.aspx"&gt;&lt;/SPAN&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=172209" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="C#" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/C_2300_/default.aspx" /><category term="Contains code" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Contains+code/default.aspx" /><category term="DSLs" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/DSLs/default.aspx" /></entry><entry><title>EntLib Configuration Console: Have it your way!</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/04/17/entlib-configuration-console-have-it-your-way.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="775352" href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.16.37.74/CustomConfigConsole.zip" /><id>/blogs/olaf/archive/2007/04/17/entlib-configuration-console-have-it-your-way.aspx</id><published>2007-04-17T05:53:00Z</published><updated>2007-04-17T05:53:00Z</updated><content type="html">&lt;P&gt;&lt;FONT face=Verdana&gt;As you might already know, one of the additions to Enterprise Library version 3 is the ability to manage configuration files from within the Visual Studio IDE.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;In order to have both the existing configuration tool and the integrated editor for Visual Studio use the same logic under the covers EntLib 3 also introduces a new assembly called &lt;FONT size=2&gt;&lt;STRONG&gt;Microsoft.Practices.EnterpriseLibrary.Configuration.Design.UI&lt;/STRONG&gt;. This assembly contains the functionality that is shared between the 2 tools.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face=Verdana&gt;Since this Configuration.Design.UI is contained in the package, let's have a look at the effort it takes to create your own user interface that leverages the EntLibs designtime nodes :-)&lt;/FONT&gt;. &lt;FONT size=2&gt;&lt;FONT face=Verdana&gt;I have to add that this never was a scenario for EntLib 3, again we might be abusing it in ways it is unanticipated for *evil grin*.&lt;BR&gt;&lt;BR&gt;Now, why would this be usefull? well maybe you work with a company that uses EntLib inside their own framework and want a branded version of this tooling. I could also see this work inside installers (after deploying a website or service you might want to configure the application, right?)&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;So, let's start out with creating a winforms project. Add a panel (1), list-view (2) and property grid (3). Then add all the buttons and branding you feel is vital to this applications success&amp;nbsp;(4) :-)&lt;BR&gt;&lt;IMG src="http://bloggingabout.net/photos/olaf_conijn/images/163769/original.aspx"&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;BR&gt;Next, let's add some references to this project. First add the:&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;STRONG&gt;Microsoft.Practices.EnterpriseLibrary.Configuration.Design.HostAdapter&lt;/STRONG&gt;,&lt;BR&gt;&lt;STRONG&gt;Microsoft.Practices.EnterpriseLibrary.Configuration.Design.UI &lt;/STRONG&gt;and&lt;BR&gt;&lt;STRONG&gt;Microsoft.Practices.EnterpriseLibrary.Configuration.Design&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;This should get us started with all of the generic designtime features EntLib provides. You should also add references to the designtime of each block you'd like to configure using this version of the tool. This means adding references to the &amp;lt;block&amp;gt; and &amp;lt;block.configuration.design&amp;gt; assemblies (or manually copy these assemblies into the \bin\ directory, since we wont be coding against those). &lt;BR&gt;For example, to have this tool manage Validation configuration, add:&lt;BR&gt;&lt;STRONG&gt;Microsoft.Practices.EnterpriseLibrary.Validation &lt;/STRONG&gt;and&lt;BR&gt;&lt;STRONG&gt;Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.Design&lt;BR&gt;&lt;BR&gt;&lt;/STRONG&gt;I added all the assemblies from EntLibs bin-directory as a reference, that should give you all the designtime features the other tools have as well.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Since we have the references, we can start coding!&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;first, lets add a field of type &lt;FONT color=#2b91af size=2&gt;SingleHierarchyConfigurationUIHostAdapater &lt;/FONT&gt;to our form. And initialize it in our constructor. The initialization code will instantiate our "ConfigurationHostAdapter", add the control it exposes to our form (inside the Panel we designed) and wire a couple of events&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; partial &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;class&lt;/SPAN&gt; Form1 : Form&lt;BR&gt;{&lt;BR&gt;SingleHierarchyConfigurationUIHostAdapater configurationConsoleAdapter;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; Form1()&lt;BR&gt;{&lt;BR&gt;InitializeComponent();&lt;BR&gt;&lt;BR&gt;HostAdapaterConfiguration adapterConfig &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; HostAdapaterConfiguration(AppDomain.CurrentDomain.BaseDirectory);&lt;BR&gt;configurationConsoleAdapter &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; SingleHierarchyConfigurationUIHostAdapater(adapterConfig);&lt;BR&gt;Panel1.Controls.Add(configurationConsoleAdapter.EditorControl);&lt;BR&gt;configurationConsoleAdapter.EditorControl.Dock &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; DockStyle.Fill;&lt;BR&gt;&lt;BR&gt;configurationConsoleAdapter.SelectionChanged += &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; EventHandler&amp;lt;SelectionChangedEventArgs&amp;gt;(configurationConsoleAdapter_SelectionChanged);&lt;BR&gt;configurationConsoleAdapter.TasksChanged += &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; EventHandler&amp;lt;TasksChangedEventArgs&amp;gt;(configurationConsoleAdapter_TasksChanged);&lt;BR&gt;configurationConsoleAdapter.DocumentClosed += &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; EventHandler&amp;lt;EventArgs&amp;gt;(configurationConsoleAdapter_DocumentClosed);&lt;BR&gt;}&lt;/SPAN&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;Cool, now for the code we want to execute on these events (I assume most of this is self-explanetory):&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;void&lt;/SPAN&gt; configurationConsoleAdapter_DocumentClosed(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;object&lt;/SPAN&gt; sender, EventArgs e)&lt;BR&gt;{&lt;BR&gt;Close();&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;void&lt;/SPAN&gt; configurationConsoleAdapter_TasksChanged(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;object&lt;/SPAN&gt; sender, TasksChangedEventArgs e)&lt;BR&gt;{&lt;BR&gt;listView1.Items.Clear();&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;foreach&lt;/SPAN&gt; (Task t &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;in&lt;/SPAN&gt; e.Tasks)&lt;BR&gt;{&lt;BR&gt;listView1.Items.Add(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; TaskViewItem(t));&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;void&lt;/SPAN&gt; configurationConsoleAdapter_SelectionChanged(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;object&lt;/SPAN&gt; sender, SelectionChangedEventArgs e)&lt;BR&gt;{&lt;BR&gt;propertyGrid1.SelectedObject &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; e.SelectedComponent;&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;class&lt;/SPAN&gt; TaskViewItem : ListViewItem&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;public&lt;/SPAN&gt; TaskViewItem(Task t): &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;base&lt;/SPAN&gt;(t.Message)&lt;BR&gt;{&lt;BR&gt;Tag &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; t;&lt;BR&gt;}&lt;BR&gt;}&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;BR&gt;Then, last -but not least - lets write the handlers that execute whenever the toolstrip-buttons "Open", "Save" or "Validate" are clicked:&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;void&lt;/SPAN&gt; openButton_Click(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;object&lt;/SPAN&gt; sender, EventArgs e)&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;using&lt;/SPAN&gt; (OpenFileDialog dialog &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; OpenFileDialog())&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;if&lt;/SPAN&gt; (dialog.ShowDialog() == DialogResult.OK)&lt;BR&gt;{&lt;BR&gt;configurationConsoleAdapter.Load(dialog.FileName);&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;void&lt;/SPAN&gt; saveButton_Click(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;object&lt;/SPAN&gt; sender, EventArgs e)&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;using&lt;/SPAN&gt; (SaveFileDialog dialog &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:red;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;=&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;new&lt;/SPAN&gt; SaveFileDialog())&lt;BR&gt;{&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;if&lt;/SPAN&gt; (dialog.ShowDialog() == DialogResult.OK)&lt;BR&gt;{&lt;BR&gt;configurationConsoleAdapter.Save(dialog.FileName);&lt;BR&gt;}&lt;BR&gt;}&lt;BR&gt;MessageBox.Show(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"Save completed"&lt;/SPAN&gt;);&lt;BR&gt;}&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;private&lt;/SPAN&gt; &lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;void&lt;/SPAN&gt; validateButton_Click(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:blue;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;object&lt;/SPAN&gt; sender, EventArgs e)&lt;BR&gt;{&lt;BR&gt;configurationConsoleAdapter.Validate();&lt;BR&gt;MessageBox.Show(&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:#666666;FONT-FAMILY:Courier New;BACKGROUND-COLOR:#e4e4e4;"&gt;"validate completed"&lt;/SPAN&gt;);&lt;BR&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Et voila, the result after this 15 minute excercise:&lt;BR&gt;&lt;IMG src="http://bloggingabout.net/photos/olaf_conijn/images/163770/original.aspx"&gt;&lt;/P&gt;
&lt;P&gt;Then, order a couple of hundred thumb-drives. copy the tool on them and distribute them to your companies consultants for that unique corporate feel your company has! :-)&lt;BR&gt;&lt;BR&gt;Attached you can find the configuration-tool in the screenshot.&lt;BR&gt;&lt;SPAN style="FONT-WEIGHT:normal;FONT-SIZE:11px;COLOR:black;FONT-FAMILY:Courier New;BACKGROUND-COLOR:transparent;"&gt;&lt;BR&gt;&lt;BR&gt;&lt;/P&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=163774" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="C#" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/C_2300_/default.aspx" /><category term="Contains code" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Contains+code/default.aspx" /><category term="Contains downloads" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Contains+downloads/default.aspx" /><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /></entry><entry><title>EntLib 3.0: Finally, go download it and get stuff done!</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/04/06/entlib-3-0-finally-go-download-it-and-get-stuff-done.aspx" /><id>/blogs/olaf/archive/2007/04/06/entlib-3-0-finally-go-download-it-and-get-stuff-done.aspx</id><published>2007-04-05T13:24:00Z</published><updated>2007-04-05T13:24:00Z</updated><content type="html">&lt;P&gt;Again i am very proud to have been part of the development team.&lt;/P&gt;
&lt;P&gt;Tom's announcement: &lt;A href="http://blogs.msdn.com/tomholl/archive/2007/04/05/just-released-enterprise-library-3-0-april-2007.aspx"&gt;http://blogs.msdn.com/tomholl/archive/2007/04/05/just-released-enterprise-library-3-0-april-2007.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Download at MSDN: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=62ef5f79-daf2-43af-9897-d926f03b9e60&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=62ef5f79-daf2-43af-9897-d926f03b9e60&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=154289" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="Enterprise Library" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/Enterprise+Library/default.aspx" /></entry><entry><title>Aspect Oriented Programming and the “usual suspects”</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/04/04/aspect-oriented-programming-and-the-usual-suspects.aspx" /><id>/blogs/olaf/archive/2007/04/04/aspect-oriented-programming-and-the-usual-suspects.aspx</id><published>2007-04-04T04:49:00Z</published><updated>2007-04-04T04:49:00Z</updated><content type="html">&lt;P&gt;Every once in a while, when advocating AOP, people ask me whether this programming technique is useful apart from stuff like logging, security, instrumentation, etc, etc. &lt;BR&gt;Usually I answer that I wouldn’t know, but i do know&amp;nbsp;that especially in enterprise application development there so many quality concerns similar to the above, that AOP can be considered just that and still very much is worth the effort.&lt;BR&gt;&lt;BR&gt;Even though I usually take the easy way out, I strongly believe that AOP concept can be applied to more than logging. &lt;BR&gt;&lt;BR&gt;In fact, one of the AOP examples that are often used is about a drawing application.&lt;/P&gt;
&lt;P&gt;Consider the following object-oriented code:&lt;BR&gt;&lt;IMG height=221 hspace=0 src="http://bloggingabout.net/photos/olaf_conijn/images/153402/original.aspx" width=469&gt;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Using aspect-oriented programming, the requirement above (updating the display) can defined separately from all the other functionality this fictitious application may provide.&lt;BR&gt;&lt;BR&gt;&lt;IMG height=84 src="http://bloggingabout.net/photos/olaf_conijn/images/153403/original.aspx" width=469&gt;&lt;BR&gt;&lt;BR&gt;&lt;BR&gt;Why is it so hard to come up with AOP examples that are *not* about our “usual suspects”? &lt;BR&gt;&lt;BR&gt;Well, mainly because most of this is hidden in the domains you work in. Finding them requires knowledge of this specific domain and proper analysis and design. The domains I am familiar with are the generic requirements developers often face when writing software (logging, caching, security, exception handling, whatnot). &lt;BR&gt;&lt;BR&gt;Eventually most of the domains have all sorts of requirements that apply to each other and can be separated from each other; helping us to make our designs clearer and structure our code better.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://bloggingabout.net/aggbug.aspx?PostID=153408" width="1" height="1"&gt;</content><author><name>Olaf Conijn</name><uri>http://bloggingabout.net/members/Olaf-Conijn/default.aspx</uri></author><category term="AOP" scheme="http://bloggingabout.net/blogs/olaf/archive/tags/AOP/default.aspx" /></entry><entry><title>Using the Policy Injection Application Block</title><link rel="alternate" type="text/html" href="/blogs/olaf/archive/2007/03/04/usin-the-policy-injection-application-block.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="1176491" href="http://bloggingabout.net/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.12.93.84/PolicyInjectionUsage.zip" /><id>/blogs/olaf/archive/2007/03/04/usin-the-policy-injection-application-block.aspx</id><published>2007-03-04T09:24:00Z</published><updated>2007-03-04T09:24:00Z</updated><content type="html">&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Since Both &lt;A title="Announcing the Policy Injection Application Block" href="http://blogs.msdn.com/tomholl/archive/2007/02/23/announcing-the-policy-injection-application-block.aspx"&gt;Tom&lt;/A&gt; and &lt;A title="Policy Injection App Block - Behind the Scenes" href="http://blogs.msdn.com/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspxhttp:/blogs.msdn.com/edjez/archive/2007/02/23/policy-injection-app-block-behind-the-scenes.aspx"&gt;Ed&lt;/A&gt; wrote an article explaining whatever the Policy Injection Application Block [PIAB] is, you might be interested in how to use this new block from within &lt;A title="Release EntLib3.0 Feb2007CTP Beta" href="http://www.codeplex.com/entlib/Release/ProjectReleases.aspx?ReleaseId=2081"&gt;Enterprise Libraries February CTP&lt;/A&gt;. Tom, who is the &lt;A title="Thoughts on Product Management" href="http://blogs.msdn.com/tomholl/archive/2007/02/25/thoughts-on-product-management.aspx"&gt;Product Manager&lt;/A&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;on Enterprise Library, has been keeping me fairly busy over the last couple of days and helped out posting some of the &lt;A title="Configuring the Policy Injection Application Block" href="http://blogs.msdn.com/tomholl/archive/2007/03/02/configuring-the-policy-injection-application-block.aspx"&gt;OPAB Configuration schema&lt;/A&gt;&amp;nbsp;already.&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 class=Section1&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;So let’s start with this exercise in using the Policy Injection Application Block!&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;BR&gt;Since I wouldn’t know about your real world application (though feel free to post specific problems you run into on the forums!) I created my own “real world” application. An ATM (or Automated Teller Machine):&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-no-proof:yes;mso-fareast-language:NL;"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;mso-no-proof:yes;mso-fareast-language:NL;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&lt;IMG src="http://bloggingabout.net/photos/olaf_conijn/images/129380/original.aspx"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;As most other real world application this application is about more than just decreasing the balance after a withdrawal is made. The requirements include:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class=MsoListParagraphCxSpFirst style="TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Log all operations to a text file.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoListParagraphCxSpMiddle style="TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Log all withdrawals of $1000 or above to the eventlog (the business guys refer to these withdrawals as “&lt;B style="mso-bidi-font-weight:normal;"&gt;Large Withdrawal&lt;/B&gt;”).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoListParagraphCxSpMiddle style="TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;No withdrawal can be made that exceeds the customer’s credit limit&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;LI class=MsoListParagraphCxSpLast style="TEXT-INDENT:-18pt;mso-list:l0 level1 lfo1;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Exceptions that occur, should be handled gracefully&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Now, let’s dive into the code and have a look at &lt;B style="mso-bidi-font-weight:normal;"&gt;how &lt;/B&gt;this Policy Injection thing will help us out.&lt;BR&gt;(The complete project can be found as an attachment, the complete listing of PIAB configuration can be found at the bottom of this blogpost)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 class=Section1&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Defining the “Interceptable” interface&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Since we will be intercepting method calls within the application we first need to determine what methods we would be potentially interested in to intercept. This can be done in 2 ways:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="TEXT-INDENT:-18pt;mso-list:l2 level1 lfo2;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;1)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;If we want to have the system intercept &lt;B style="mso-bidi-font-weight:normal;"&gt;*all*&lt;/B&gt; calls to a specific class (and we have the freedom of defining our own base class on this class) &lt;B style="mso-bidi-font-weight:normal;"&gt;we can do so by having this class derive from MarshalByRefObject.&lt;/B&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="TEXT-INDENT:-18pt;mso-list:l2 level1 lfo2;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;2)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;If we want a more fine grained interface to do interception on (or we already have a baseclass, other than MarshalByRefObject) &lt;B style="mso-bidi-font-weight:normal;"&gt;we can have our class implement an interface, which will define the methods we can do interception on&lt;/B&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Additionally, all classes that have methods we would like to intercept need to be created using a factory, called &lt;B style="mso-bidi-font-weight:normal;"&gt;PolicyInjection. &lt;/B&gt;In code this looks like:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;//All methods on this class can be intercepted, it derives from MarshalByRefObject&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;InterceptAllMyMethods&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;MarshalByRefObject&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Method1() { }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Method2() { }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;}&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;(then, when creating an instance of the class above)&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;BR&gt;&lt;BR&gt;&lt;SPAN style="COLOR:green;"&gt;//Have the factory create the instance, this will make interception possible&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;InterceptAllMyMethods&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; interceptable1 = &lt;SPAN style="COLOR:#2b91af;"&gt;PolicyInjection&lt;/SPAN&gt;.Create&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;InterceptAllMyMethods&lt;/SPAN&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;interceptable1.Method1(); &lt;SPAN style="COLOR:green;"&gt;//this method call will be intercepted by the PolicyInjection AB&lt;/SPAN&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;BR style="mso-special-character:line-break;"&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;or:&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;//Methods defined on IInterceptableMethods can be intercepted&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;class&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;InterceptMethodsInInterface&lt;/SPAN&gt; : &lt;SPAN style="COLOR:#2b91af;"&gt;IInterceptableMethods&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Method1() { }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public&lt;/SPAN&gt; &lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Method2() { } &lt;SPAN style="COLOR:green;"&gt;//not in interface, will not be intercepted&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;IInterceptableMethods&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Method1();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;}&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;BR&gt;(again, create the object using the factory)&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#2b91af;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;IInterceptableMethods&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; interceptable2 = &lt;SPAN style="COLOR:#2b91af;"&gt;PolicyInjection&lt;/SPAN&gt;.Create&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;InterceptMethodsInInterface&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#2b91af;"&gt;IInterceptableMethods&lt;/SPAN&gt;&amp;gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE:10pt;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;interceptable2.Method1(); &lt;SPAN style="COLOR:green;"&gt;//this method call will be intercepted by the PolicyInjection AB&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:green;LINE-HEIGHT:115%;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;In our teller machine we choose the second option, and defined an interface that looks like the following:&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;public&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;SPAN style="COLOR:blue;"&gt;interface&lt;/SPAN&gt; &lt;SPAN style="COLOR:#2b91af;"&gt;ITeller&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; WithdrawAmount20(&lt;SPAN style="COLOR:#2b91af;"&gt;Account&lt;/SPAN&gt; account);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; WithdrawAmount50(&lt;SPAN style="COLOR:#2b91af;"&gt;Account&lt;/SPAN&gt; account);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; WithdrawAmount100(&lt;SPAN style="COLOR:#2b91af;"&gt;Account&lt;/SPAN&gt; account);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; WithdrawAmount500(&lt;SPAN style="COLOR:#2b91af;"&gt;Account&lt;/SPAN&gt; account);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;SPAN style="COLOR:#2b91af;"&gt;Tag&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#a31515;"&gt;"Large Withdrawal"&lt;/SPAN&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; WithdrawAmount1000(&lt;SPAN style="COLOR:#2b91af;"&gt;Account&lt;/SPAN&gt; account);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[&lt;SPAN style="COLOR:#2b91af;"&gt;Tag&lt;/SPAN&gt;(&lt;SPAN style="COLOR:#a31515;"&gt;"Large Withdrawal"&lt;/SPAN&gt;)]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; WithdrawAmount2500(&lt;SPAN style="COLOR:#2b91af;"&gt;Account&lt;/SPAN&gt; account);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;void&lt;/SPAN&gt; Kicked();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;When creating an instance of the Teller class (which derived from this interface) we do this using the &lt;B style="mso-bidi-font-weight:normal;"&gt;PolcyInjection&lt;/B&gt; factory. This will make every method call in the interface about a possible victom for interception.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;BR&gt;&lt;BR&gt;teller = &lt;SPAN style="COLOR:#2b91af;"&gt;PolicyInjection&lt;/SPAN&gt;.Create&amp;lt;&lt;SPAN style="COLOR:#2b91af;"&gt;Teller&lt;/SPAN&gt;, &lt;SPAN style="COLOR:#2b91af;"&gt;ITeller&lt;/SPAN&gt;&amp;gt;();&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Now this is done, we can proceed with our first requirement:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H2 class=Section1&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Logging every operation to a text file&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H2&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Since we have our instance of the Teller class created using the &lt;B style="mso-bidi-font-weight:normal;"&gt;PolicyInjection &lt;/B&gt;factory, next thing we need to think about is what to do in order to satisfy this requirement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;Every operation &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;in this requirement can be interpreted as “all method calls to the ITeller interface” (above). Logging this to a textfile, in our context can be interpreted as &lt;B style="mso-bidi-font-weight:normal;"&gt;use Enterprise Library logging to write the event to a text file&lt;/B&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;These 2 bits of information (the &lt;B style="mso-bidi-font-weight:normal;"&gt;where &lt;/B&gt;and the &lt;B style="mso-bidi-font-weight:normal;"&gt;what&lt;/B&gt;) make up a Policy. This Policy can be configured and will be Injected into the Teller class (without the need of explicitly writing the code to call The Logging Application Block, over and over again).&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;The generic skeleton for a policy in configuration looks like the following:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;policies&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;PolicyName&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;matchingRules&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[List of rules that should evelautate true, &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;before policy is applied]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;matchingRules&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;handlers&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;[List of handlers that should be invoced&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;by this Policy]&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;handlers&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;policies&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;For this specific policy we add:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpFirst style="TEXT-INDENT:-18pt;mso-list:l1 level1 lfo3;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;1)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;A rule to the matchingRule-element that will match any method on the ITeller interface&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoListParagraphCxSpLast style="TEXT-INDENT:-18pt;mso-list:l1 level1 lfo3;"&gt;&lt;SPAN style="mso-ansi-language:EN-US;mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;2)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;A handler that calls into the Logging Application block, to update the textfile, we use as a log.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language:EN-US;"&gt;In the applications configuration this now looks like the following:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;add&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;name&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;LogAllOperationsToFile&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;matchingRules&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;name&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;Type is ITeller&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;type&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;Microsoft.Practices.EnterpriseLibrary.PolicyInjection.MatchingRules.TypeMatchingRule, Microsoft.Practices.EnterpriseLibrary.PolicyInjection&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;ignoreCase&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;match&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;ITeller&lt;/SPAN&gt;"&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt; /&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;/&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;matchingRules&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;handlers&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&amp;lt;&lt;/B&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:#a31515;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;add&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;name&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;Log operation to text file&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;type&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers.LogCallHandler, Microsoft.Practices.EnterpriseLibrary.PolicyInjection.CallHandlers&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;logBehavior&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;Before&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;beforeMessage&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;This is the before message&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;afterMessage&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;This is the after message&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;includeParameterValues&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;"&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;includeCallStack&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;true&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:red;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;includeCallTime&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;COLOR:blue;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;=&lt;/SPAN&gt;&lt;/B&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:'Courier New';mso-ansi-language:EN-US;mso-no-proof:yes;"&gt;"&lt;SPAN style="COLOR:blue;"&gt;false&lt;/SPAN&gt;"&lt;SPAN style="COLOR:blue;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNorma