Skip to content

yanglee/Virtuosity

 
 

Repository files navigation

This is an add-in for Fody

Change all members to virtual as part of your build.

Introduction to Fody

Nuget package

There is a nuget package avaliable here http://nuget.org/packages/Virtuosity.Fody

What it actually does to your assembly

Selects all members that meet the following criteria

  • from non sealed classes
  • non static members
  • non abstract members
  • non private members
  • non virtual members

Change them to virtual

For all (now virtual) members

  • change calls to those members to virtual
  • change new modifiers to override modifiers

Configuration Options

Exclude types with an Attribute

If for some reason you want to skip a specific class you can mark it with a DoNotVirtualizeAttribute.

Since no reference assembly is shipped with Virtuosity. Just add the below class to your assembly. Namespace does not matter.

public class DoNotVirtualizeAttribute : Attribute
{
}

So your class will look like this

[DoNotVirtualize]
public class ClassToSkip
{
    ...
}

Include or exclude namespaces

These config options are access by modifying the Virtuosity node in FodyWeavers.xml

ExcludeNamespaces

A list of namespaces to exclude.

Can not be defiend with IncludeNamespaces.

Can take two forms.

As an element with items delimetered by a newline.

<Virtuosity>
    <ExcludeNamespaces>
        Foo
        Bar
    </ExcludeNamespaces>
</Virtuosity>

Or as a attribute with items delimetered by a pipe |.

<Virtuosity ExcludeNamespaces='Foo|Bar'/>

IncludeNamespaces

A list of namespaces to include.

Can not be defiend with ExcludeNamespaces.

Can take two forms.

As an element with items delimetered by a newline.

<Virtuosity>
    <IncludeNamespaces>
        Foo
        Bar
    </IncludeNamespaces>
</Virtuosity>

Or as a attribute with items delimetered by a pipe |.

<Virtuosity IncludeNamespaces='Foo|Bar'/>

Why is this useful

If you are coding in .net you will have used or heard of one of the following tools

Well all these tools make use of DynamicProxy. DynamicProxy allows for runtime interception of members. The one caveat is that all intercepted members must be virtual. This means that that all the above tools, to some extent, require members to be virtual.

If you forget to mark something as virtual these tools will not work and fail in sometimes very unhelpful ways. So rather than having to remember to use the virtual keyword Virtuosity means members will be virtual by default.

Icon

Russian Doll designed by Simon Child from The Noun Project

About

Change all members to virtual as part of your build.

Resources

License

Stars

Watchers

Forks

Packages

No packages published