MrMeeseeks.Visitor 1.1.0

dotnet add package MrMeeseeks.Visitor --version 1.1.0                
NuGet\Install-Package MrMeeseeks.Visitor -Version 1.1.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="MrMeeseeks.Visitor" Version="1.1.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add MrMeeseeks.Visitor --version 1.1.0                
#r "nuget: MrMeeseeks.Visitor, 1.1.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install MrMeeseeks.Visitor as a Cake Addin
#addin nuget:?package=MrMeeseeks.Visitor&version=1.1.0

// Install MrMeeseeks.Visitor as a Cake Tool
#tool nuget:?package=MrMeeseeks.Visitor&version=1.1.0                

MrMeeseeks.Visitor

If you like the Visitor pattern, but don't like to write the boilerplate code for it, then search no more. This Mr. Meeseeks will help you with that.

This is a source generator which generates the boilerplate code for the Visitor Pattern.

Nuget

The easiest way to use DIE is to get it via nuget. Here is the package page:

https://www.nuget.org/packages/MrMeeseeks.Visitor/

Either search for MrMeeseeks.Visitor in the nuget manager of the IDE of your choice.

Or call the following PowerShell command:

Install-Package MrMeeseeks.Visitor

Alternatively, you can use dotnet:

dotnet add [your project] package MrMeeseeks.Visitor

Or manually add the package reference to the target .csproj:

<PackageReference Include="MrMeeseeks.Visitor" Version="[preferrably the current version]" />

Usage

The usage is very simple. You just need to declare a visitor interface, an base interface for the elements, an interface for each element and an implementation for each element. Then you just need to add a VisitorInterfacePair attribute with the visitor interface and the element interface types as input. As long as the visitor interface, the element interface and the element implementations are partial, this source generator will generate the boilerplate code for you.

Here is an example of the manual effort:

using MrMeeseeks.Visitor;
using MrMeeseeks.Visitor.Sample;

[assembly:VisitorInterfacePair(typeof(IVisitor), typeof(IElement))]

namespace MrMeeseeks.Visitor.Sample;

public partial interface IVisitor { }

public partial interface IElement { }

public interface IElementA : IElement { }

public partial class ElementA : IElementA { }

public interface IElementB : IElement { }

public partial class ElementB : IElementB { }

public interface IElementC : IElement { }

public partial class ElementC : IElementC { }

Here is what will be generated. Visitor interface:

namespace MrMeeseeks.Visitor.Sample
{
    partial interface IVisitor
    {
        void VisitIElementA(global::MrMeeseeks.Visitor.Sample.IElementA element);
        void VisitIElementC(global::MrMeeseeks.Visitor.Sample.IElementC element);
        void VisitIElementB(global::MrMeeseeks.Visitor.Sample.IElementB element);
    }
}

Element interface:

namespace MrMeeseeks.Visitor.Sample
{
    partial interface IElement
    {
        void Accept(global::MrMeeseeks.Visitor.Sample.IVisitor visitor);
    }
}

One of the element implementations:

namespace MrMeeseeks.Visitor.Sample
{
    partial class ElementA
    {
        public void Accept(global::MrMeeseeks.Visitor.Sample.IVisitor visitor)
        {
            visitor.VisitIElementA(this);
        }
    }
}
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETStandard 2.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.1.0 312 4/26/2023
1.0.0 250 4/2/2023

-/-