Extensibility has always been one of the key design principles for Enterprise Library. Today, there are 3 ways how EntLib can be extended and customized:
1) Write pluggable custom providers. Each application block has extension points which you can leverage. With providers, functionality that is not a part of the application block’s core functionality can be replaced or upgraded without affecting other areas of the application block. You can also create providers which are specific to a new environment. Furthermore, with the provider model, we are able to minimize coupling between application blocks themselves.
2) Modify the source of an application block. Source code has always been available for Enterprise Library and the license permitted modifying it and producing derivative works. There are teams that have taken advantage of that. Of course, modifying the source means that your forward compatibility with future releases of EntLib is likely going to be broken. However, you can trim down the pieces you care about or modify the behavior the way that really fits your needs.
3) Write a completely new application block. You want an entirely new set of functionality and you also want to leverage the configuration subsystem of EntLib, the tooling and possibly integrate it with other blocks. There are community members who have done just that and released their custom blocks via the EntLibContrib project (see, for example, the Query Application Block or the Resource Application Block).
Back in the fall we’ve started the work to produce a series of tutorials to help people extend EntLib. We’ve presented these at the Enterprise Library Extensibility workshop at the patterns & practices Symposium and revised them since based on the feedback received.
Today I am pleased to announce general availability of the Enterprise Library Extensibility Hands-on Labs. They guide you through the techniques to build your:
- custom exception handler
- custom logging trace listener
- custom configuration source
In addition, all provide tutorials on how to customize the design time experience, including:
- “bare-bones” configuration tool integration (basic name/value pairs)
- full design time integration (more intuitive configuration options, validation, tool-tips, editors like type picker etc.)
- fluent interface configuration builder support (improved programmatic support)
Note, the fourth lab on how to build your own custom block is in production now.
Happy learning, practicing, coding and remember to share your extensions with the community!