Dependency Injection in Attributes: don’t do it!

A number of common frameworks have promoted the concept of using attributes as a way of implementing AOP. On the surface this seems perfectly acceptable but in reality the maintainability of these options degrades as you add behaviors by injecting dependencies into attributes. The point of this article is “don’t do it!” There are better ways and this article will describe one such alternative.

read more...

- filed under .NET General, ASP.NET, C#, Dependency injection - five comments / No trackbacks - §

Dependency Injection anti-pattern: multiple constructors

When Dependency Injection is applied correctly and completely it is important that each type only has one constructor - multiple constructors are redundant, make your DI configuration fragile, and lead to maintainability issues.

read more...

- filed under .NET General, Architecture, C#, Dependency injection - ten comments / No trackbacks - §

Simple Injector 2 – The future is here

Announcing the new major release of Simple Injector. The Simple Injector is an easy-to-use Inversion of Control library for .NET and Silverlight.

read more...

- filed under .NET General, Architecture, Dependency injection, Simple Injector - No comments / No trackbacks - §

Writing Highly Maintainable WCF Services

When it comes to writing maintainable software, there is no alternative to the five core principles of object oriented design. When software is based on these principles, everything becomes significantly easier. When your software is based on these principles, writing a highly maintainable WCF web service on top of that can be done in just a matter of minutes.

read more...

- filed under .NET General, Architecture, C#, Dependency injection - eight comments / No trackbacks - §

Primitive Dependencies with Simple Injector

This article describes how to extend the Simple Injector with convension based configuration for primitive constructor arguments.

read more...

- filed under .NET General, C#, Dependency injection, Simple Injector - No comments / No trackbacks - §

Returning data from command handlers

This article extends the architectural design of command handlers to allow command handlers to return data.

read more...

- filed under .NET General, Architecture, C#, Dependency injection, O/RM, Simple Injector - 19 comments / No trackbacks - §

Meanwhile... on the query side of my architecture

Command-query separation is a common concept in the software industry. Many architectures separate commands from the rest of the system and send command messages that are processed by command handlers. This same concept of messages and handlers can just as easily be applied to the query side of an architecture. There are not many systems using this technique and this article is an attempt to change that. Two simple interfaces will change the look of your architecture... forever.

read more...

- filed under .NET General, Architecture, Dependency injection - 23 comments / No trackbacks - §

Meanwhile... on the command side of my architecture

This article describes how a single interface can transform the design of your application to be much cleaner, and more flexible than you ever thought possible.

read more...

- filed under .NET General, Architecture, C#, Dependency injection - 33 comments / No trackbacks - §

Adding Covariance and Contravariance to Simple Injector

A few weeks back I read this question on Stackoverflow. The question was about applying covariance / contravariance (or variance for short) to the Autofac dependency injection container. The question triggered me to think about variance support in the Simple Injector. I was wondering whether special changes were needed to the core framework to allow this. However, it didn't take me long to realize that enabling variance is actually pretty easy for anyone using the Simple Injector. The prerequisites are a proper application design and .NET 4.0.

read more...

- filed under .NET General, C#, Dependency injection, Simple Injector - four comments / No trackbacks - §

Faking your LINQ Provider part 2: Optimizing performance with fetching strategies

This sequel explains how to write O/RM specific performance optimizations in such a way that the core business logic won’t be affected. This article builds on top of the foundation described in part 1 and uses the Fetching Strategy design pattern to achieve this goal.

read more...

- filed under .NET General, C#, Dependency injection, Entity Framework, LINQ, LINQ to SQL, O/RM, Simple Injector, SQL - No comments / No trackbacks - §

Simple Injector: Working with multiple constructors

Although limited in features, the Simple Injector has simple but flexible way to add features, such as the possibility to work with multiple constructors.

read more...

- filed under .NET General, C#, Dependency injection, Simple Injector - three comments / No trackbacks - §

Simple Injector - The easiest Dependency Injection framework in town

The Simple Injector is an easy-to-use Inversion of Control library for .NET and Silverlight. It solely supports code-based configuration and is an ideal starting point for developers unfamiliar with larger IoC / DI libraries.

read more...

- filed under .NET General, C#, Simple Injector, Simple Service Locator - one comment / No trackbacks - §

Removing Keyed Registrations from the Simple Service Locator

In this post I again like to consult my Simple Service Locator users, readers of my blog, and followers of the Simple Service Locator CodePlex project, about a change to the library I'm considering.

read more...

- filed under .NET General, Simple Service Locator - two comments / No trackbacks - §

Do we need the Common Service Locator?

The Simple Service Locator has a hard dependency on the Common Service Locator. But is this a good design choice? I like to hear your opinion on this.

read more...

- filed under .NET General, Simple Service Locator - eleven comments / No trackbacks - §

Faking your LINQ provider part 1

I recently tried to figure out how to write testable code while using LINQ to SQL as my O/RM of choice, without loosing the ability to use LINQ to Expression trees! In this post I describe the design I ender up with.

read more...

- filed under .NET General, ADO.NET, C#, Databases, Dependency injection, Entity Framework, LINQ, LINQ to SQL, O/RM - fifteen comments / No trackbacks - §

Adding Enum Support to Entity Framework LINQ queries

Roger Alsing wrote an interesting post yesterday about adding support for enums to LINQ queries. It is nice to see what Roger is doing with the .NET 4.0 ExpressionVisitor to change Expression trees that allow this behavior. What I dislike however, is that for this solution you need to reimplement all Queryable extension methods. So I thought about this and found a more pleasant way of intercepting query calls.

read more...

- filed under .NET General, C#, Databases, Entity Framework, LINQ, LINQ to SQL, O/RM, SQL - two comments / No trackbacks - §

Using IDataErrorInfo with Validation Application Block

The IDataErrorInfo interface is a core part of the .NET framework and both WPF and ASP.NET MVC use this interface for validation purposes. In this article I will show how to build an abstract base class that implements IDataErrorInfo in a way that Validation Application Block is used under the covers.

read more...

- filed under .NET General, C#, Enterprise Library, Validation Application Block - five comments / No trackbacks - §

Dependency Injection in ASP.NET Web Forms with the Common Service Locator

This article describes how to create and configure a custom PageHandlerFactory class that enables automatic constructor injection for System.Web.UI.Page classes. This keeps your application design clean and allows you to keep the application’s dependency to the IoC library to a minimum.

read more...

- filed under .NET General, C#, Dependency injection, Simple Service Locator - five comments / No trackbacks - §

Mixing Validation Application Block With DataAnnotation: What About SelfValidation?

This article describes how to move the self validation methods of a type to its meta data type, using Validation Application Block 5.0. Using self validation methods inside Data Annotations' meta data type is something that is not supported out of the box.

read more...

- filed under .NET General, C#, Enterprise Library, Validation Application Block - nine comments / No trackbacks - §

Integrating Validation Application Block with ASP.NET part 2

This post describes how to take integration of Validation Application Block with ASP.NET Web Forms to the next level by introducing extension methods that centralize the creation of PropertyProxyValidator controls and enable compile time support. This post build on the code in the previous article and allows users to define value conversions.

read more...

- filed under ASP.NET, C#, Enterprise Library, Validation Application Block - five comments / No trackbacks - §

Integrating Validation Application Block with ASP.NET part 1

This post describes how to take integration of Validation Application Block with ASP.NET Web Forms to the next level by introducing extension methods that centralize the creation of PropertyProxyValidator controls and enable compile time support.

read more...

- filed under ASP.NET, C#, Enterprise Library, Validation Application Block - four comments / No trackbacks - §

CuttingEdge.Conditions source used for MongoDB .NET Driver

Since I built CuttingEdge.Conditions, I had lots of positive reactions from developers who loved it. However, I've never saw the source code been reused in another library or framework; until now.

read more...

- filed under .NET General, C#, CuttingEdge.Conditions - four comments / No trackbacks - §

Breaking changes in SmtpClient in .NET 4.0

In .NET 4.0 the SmtpClient class now implements IDisposable. This is a breaking change what you should watch out for.

read more...

- filed under .NET General - No comments / No trackbacks - §

Protecting against Regex DOS attacks

Bryan Sullivan describes in the May issue of his MSDN article a denial of service attack that abuses regular expressions. As Bryan explains, a poorly written regex can bring your server to its knees.

read more...

- filed under .NET General, Security - one comment / No trackbacks - §

Breaking changes in .NET 4.0

Microsoft published an interesting list of breaking changes in the just released .NET 4.0 framework.

read more...

- filed under .NET General - No comments / No trackbacks - §

Validator inheritance while using Validation Application Block configuration files

This article describes how to build an IConfigurationSource implementation that allows validators, defined in a base class or interface, to be inherited by subclasses and implementations.

read more...

- filed under .NET General, C#, Enterprise Library, Validation Application Block - three comments / No trackbacks - §

Splitting up Validation Application Block configuration into multiple files

This article describes how to build an IConfigurationSource implementation that allows reading multiple configuration files that each contain part of the total Enterprise Library Validation Application Block configuration.

read more...

- filed under .NET General, C#, Enterprise Library, Validation Application Block - three comments / No trackbacks - §

Printer Jam

The last couple of days I've been having a Printer Jam on my way to work.

read more...

- filed under Miscellaneous - one comment / No trackbacks - §

Simple Service Locator - The easiest Inversion of Control framework in town

The Simple Service Locator is an easy-to-use Inversion of Control library that is a complete implementation of the Common Service Locator interface. It solely supports code-based configuration and is an ideal starting point for developers unfamiliar with larger IoC / DI libraries

read more...

- filed under .NET General, C#, Dependency injection, Simple Service Locator - nine comments / No trackbacks - §

CuttingEdge.Conditions in MSDN Magazine Toolbox column

In the November 2009 issue of his MSDN Magazine Toolbox column, Scott Mitchell writes about CuttingEdge.Conditions.

read more...

- filed under CuttingEdge.Conditions - No comments / No trackbacks - §