There are a lot of "frameworks" available out there for .Net developers to use. Examples are the Microsoft Enterprise Library, Spring.Net, NHibernate, the Castle Project and Rockford Lhotka’s CSLA.Net. Although these products have various offerings and different target problems to solve, they are essentally called frameworks. These frameworks help fast track development by providing core features and functionalities that may, otherwise, take time to develop. They have their advantages. But they may also be traps that designers should be careful about.
I don’t really intend to re-invent the wheel, but, I prefer building my own framework and similar "utilities" as some developers would like to call them. I base my frameworks from these existing products, not exactly like re-inventing the wheel, but rather with the intention of simplifying the wheel.
I also like the fact that the frameworks I create are named after the enterprise it targets (<company>.Library). There is a sense of ownership and it can be customized easily to adapt to the capacity of the enterprise’s IT organization. I also like the fact that the frameworks I create can be easier to use, maintain, manage and support. They are also flexible and, likewise, extensible by design.
My framework, like the other frameworks, has its own pit falls. It has the same problems as the other frameworks. The most important consideration is the fact that better technologies always get invented even while you write your own framework. For example, the currently coined ADO.Net vNext promises its own entity framework competing against Spring.Net and NHibernate. ADO.Net vNext is new, but it is the direction of .Net.
The problem that ADO.Net vNext solves is the direction of the developer community in general. Most Java developers have been embracing this model for a long time. I am not sure yet, but the possibility is high that, in the end, .Net designers should highly consider using it instead of Spring.Net and NHibernate regardless of who is mature or not.
Why do I write my own framework? It’s simply because I want to stick as close as possible to the .Net Framework. Not that I avoid third-party products. But if you can, why not?