For any and all developers that have an addiction to learning and problem solving I give you (drum roll please) Sleep Can Wait...
Tuesday, August 13, 2013
Intro to MEF - Part 2
Friday, June 21, 2013
C# Gotcha: Deferred Execution & Method Groups
Here is a short video demonstrating a C# Gotcha when it comes to using Deferred Execution with Method Groups:
Friday, January 11, 2013
An Intro to MEF – Part 1
I’m a big fan of MEF (Managed Extensibility Framework). I think it is very easy to use and offers a lot of advantages when developing an application. MEF was developed to be a framework to allow for extensibility in your applications. Parts of Visual Studio (including the Entity Framework Designer) run on MEF as does the Extension Manager. That being said, it also works very well as a Dependency Injection container. My goal is not to compare MEF to other containers (ie. Unity, Windsor Castle, NInject, etc) but to show you how to use MEF as a DI container.
As usual, you can view/download the code on GitHub.
For Part 1 we will create a simple console application that will log a message. However, we will use MEF as a DI container to supply the ILogger implementation. Remember, this is meant to be a very simple example. It is definitely not meant to demonstrate how MEF should be used.
Monday, June 25, 2012
EF Entity Name Scrubbing - Part 1
Here is the database that we will be working with:
1. The Entities are imported with these names
2. Navigation Properties and References are created using these names
3. The Pluralization service can have issues figuring out what the appropriate pluralization would be
Let's begin by creating a new C# Project called EFEntityNameScrubberExtension:
- Microsoft.Data.Entity.Design.Extensibility
- System.Data.Entity.Design
- System.ComponentModel.Composition
Once the EI has started, create a new Console Application and add an Entity Data Model. Choose the "Generate from Database" option and click Next. Select the Sandbox database (or any database with the table prefix that we will try to create. For now, simply add a single table to the model:
Saturday, June 23, 2012
GetCustomAttributes Sucks
I'd prefer to do something like this:
Here is the source for the GetAttribute extension method:
Saturday, June 2, 2012
Getting back to life
At the end of the day I'm writing this blog post for one reason... to celebrate my getting back to life! I effectively let my life go to hell. My social life was non-existent. My health went to crap. So...thank you jebus! I'm back!
Saturday, September 10, 2011
Intro to Expressions
What will we be building today? How about the beginnings a validation-helper for ensuring that a field, property, or argument is not null? How often have you written the following code?
Now this code is all good and well. But at some point we might change the name of the parameter but forget to update the string that represents the name of the parameter. Instead we can use an Expression which will dynamically get the name of the member which guarantees that the argument name provided to the ArgumentNullException constructor is always correct. So instead of using a string to represent the argument name, let's use an Expression:
Nice and simple! Now for some Expression basics.
Expression Basics
As seen on msdn the System.Linq.Expression namespace can be explained as follows:The System.Linq.Expressions namespace contains classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees.
The abstract class Expression provides the root of a class hierarchy used to model expression trees.
The classes in this namespace that derive from Expression, for example MemberExpression and ParameterExpression, are used to represent nodes in an expression tree. The Expression class contains static (Shared in Visual Basic) factory methods to create expression tree nodes of the various types.
The enumeration type ExpressionType specifies the unique node types.
I think that's enough of that for now. Let's dive into some code.
Following is what our method might look like without utilizing Expressions.
As we will be passing properties, fields, and method parameters into our IsNotNull method, we will be dealing exclusively with Expressions of type MemberExpression.
The best tool in the Expression toolbox is the ExpressionVisitor. In a nutshell an ExpressionVisitor handles the navigation and of an ExpressionTree (which we will talk about in more detail in my next post).
To handle extracting the MemberExpressions from our ExpressionTree we will create an ExpressionVisitor and override the VisitMember method. The VisitMember method will simply add the MemberExpression to a SortedList
Now that we have a method of extracting a MemberExpression, we can implement our IsNotNull
- Extract the MemberExpression
- Extract the value of the property, field, or argument from the MemberExpression
- Check if the value is null
- If null, throw an ArgumentNullException
Here is the finished code for the Validate class:
And finally here is an example of how to invoke IsNotNull:
Source code can be downloaded from github here.







