Is it possible to configure an Association in a Visual Studio (2013) class diagram so that when the code is generated from it that it creates a property with type List<MyClass>
or even ICollection<MyClass>
rather than it's default of IEnumerable<MyClass>
?
Applies to: Visual Studio Visual Studio for Mac Visual Studio Code Code generation allows you to produce program code that is strongly typed, and yet can be easily changed when the source model changes.
These tool windows can examine code in Visual Studio projects, .NET components, COM components, dynamic-link libraries (DLL), and type libraries (TLB).
Visual Studio is available in several editions. Not all of these provide support for the architecture and modeling tools. The following table shows the availability of each tool. Only supports reading code maps, filtering code maps, adding new generic nodes, and creating a new Directed Graph from a selection.
A Source Generator is a .NET Standard 2.0 assembly that is loaded by the compiler along with any analyzers. It is usable in environments where .NET Standard components can be loaded and run. Now that you know what a Source Generator is, let’s go through some of the scenarios they can improve.
Yes, it is possible to change the output. Visual Studio uses T4 templates to generate code from the Architecture tools.
You can find the templates at C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Architecture Tools\Extensibility\Templates\Text (remove (x86) if you have a 32-bit machine).
Use the following steps to change the generated code to IList<T>
instead of the default IEnumerable<T>
:
Locate the method named ElementType(IType type, bool isEnumerable = false)
private static string ElementType(IType type, bool isEnumerable = false)
{
string text = string.Empty;
if (type == null)
{
text = "object";
}
else
{
text = TypeName(type);
}
if(!string.IsNullOrWhiteSpace(text) && isEnumerable)
{
//SO Change IEnumerable to IList here
text = "IEnumerable<" + text + ">";
}
return text;
}
Change the string IEnumerable to whatever you want (see my comment starting with SO)
You can even write your own T4 Templates and instruct visual studio to use them when generating code, more details on MSDN.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With