One of the interesting aspects of having worked in the Web Service Software Factory: Modeling Edition For Visual Studio 2008 project is the extensibility options that allows an organization or end developer to customize the tool to each needs. However, there some areas that were left open for customization or in some cases for further enhancements. I would like to start a series of post intended to cover these extensibility points or “missing” areas left for the user exercise like custom type pickers, VB support for code generation and importing existing contracts into the models (from WSDL or managed code).
Notice that most of the typical extensibility scenarios that are already addressed by WSSF:ME can be found in the Extensibility Hands-on labs located in the Web Service Software Factory Community Workspace or in Ade’s blog regarding validation or extending it.
I Want My Types!
Let’s start with a simple example that will show how to let the type piker that shows up when you select the type property of a Data Contract or Service Contract Primitive Data or Message type like you see on the figure below.
Now let’s say you want to select a custom type or a non primitive type that is not included in the picker list. First let’s say that this behavior is by design and as you might have guessed by the element names prefixed with “Primitive” they may only reference primitive types as the suggested guidance. However if for some reason you need to reference other type, you can simply follow the steps below and include any public type in the type picker dialog.
1. Open the DataContractDsl project and replace all the occurrences of “PublicPrimitiveTypeFilter” with “PublicTypeFilter”. This way we use the base class of PublicPrimitiveTypeFilter that will simply let all public types show up in the list. Notice that you can create your own filter class following the same structure used in these classes.
2. Repeat the same with ServiceContractvDsl project.
3. Rebuild the solution.
4. Test the result selecting a type and you should see the dialog below:
Now you may add any public type regardless if it’s a platform type or a custom one.
Stay tuned for Part 2.