Minerals.AutoMixins 0.2.1

dotnet add package Minerals.AutoMixins --version 0.2.1                
NuGet\Install-Package Minerals.AutoMixins -Version 0.2.1                
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="Minerals.AutoMixins" Version="0.2.1" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Minerals.AutoMixins --version 0.2.1                
#r "nuget: Minerals.AutoMixins, 0.2.1"                
#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 Minerals.AutoMixins as a Cake Addin
#addin nuget:?package=Minerals.AutoMixins&version=0.2.1

// Install Minerals.AutoMixins as a Cake Tool
#tool nuget:?package=Minerals.AutoMixins&version=0.2.1                

Minerals.AutoMixins

This NuGet package provides a capability to automatically generate a mix-in design pattern for C# classes by using only one attribute. This allows you to easily extend the functionality of existing classes.

Funkcje

  • Easy mix-in definition: Mix-in object are defined by using the [GenerateMixin] attribute.
  • Easy addition of mix-ins to a class: To add a mix-in object to a class, use the [AddMixin(typeof(ExampleMixinClass))] attribute.
  • Optimized code generation: The package uses an incremental source generator, so it doesn't significantly slow down the compilation process.
  • Compatibility with .NET Standard 2.0 and C# 7.3+: Works on a wide range of platforms and development environments.

Installation

Add the Minerals.AutoMixins nuget package to your C# project using the following methods:

1. Project file definition

<PackageReference Include="Minerals.AutoMixins" Version="0.2.*" />

2. dotnet command

dotnet add package Minerals.AutoMixins

Why choose this package instead of the Default Interface Implementation?

Because the C# language option called "Default Interface Implementation", has limited runtime platform support. The Minerals.AutoMixins package is compatible with netstandard2.0 and C# language version 7.3+.

Usage

To define a mix-in object, add the [GenerateMixin] attribute to the selected class.

Defining mix-in objects

namespace Examples
{
    [Minerals.AutoMixins.GenerateMixin]
    public class ExampleMixin1
    {
        public float Property1 { get; set; } = 0.5f;

        private int _field1 = 0;

        private void Method1()
        {
            Console.WriteLine("Test1");
        }
    }

    [Minerals.AutoMixins.GenerateMixin]
    public class ExampleMixin2
    {
        public string PropertyText1 { get; set; } = "Test2";
    }
}

Using mix-in objects

To use the selected mix-in object, add the [AddMixin(typeof(ExampleMixin1))] attribute to the selected class. The class implementing the AddMixin attribute must have the partial modifier to work properly.

namespace Examples
{
    [Minerals.AutoMixins.AddMixin(typeof(ExampleMixin1))]
    public partial class ExampleClass
    {
        public int MyProperty { get; set; } = 3;
    }
}

The code above will generate an ExampleClass.g.cs file with a partial class ExampleClass.

namespace Examples
{
    [global::System.Diagnostics.DebuggerNonUserCode]
    [global::System.Runtime.CompilerServices.CompilerGenerated]
    [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
    public partial class ExampleClass
    {
        // MixinType: ExampleMixin1
        public float Property1 { get; set; } = 0.5f;
        private int _field1 = 0;
        private void Method1()
        {
            Console.WriteLine("Test1");
        }
    }
}

Multiple mix-ins

This package allows you to add multiple mix-in objects to a single class through attribute arguments [AddMixin(typeof(ExampleMixin1), typeof(ExampleMixin2))].

namespace Examples
{
    [Minerals.AutoMixins.AddMixin(typeof(ExampleMixin1), typeof(ExampleMixin2))]
    public partial class ExampleClass
    {
        public int MyProperty { get; set; } = 3;

        public void MyMethod()
        {

        }
    }
}

The code above will generate an ExampleClass.g.cs file with a partial class ExampleClass.

namespace Examples
{
    [global::System.Diagnostics.DebuggerNonUserCode]
    [global::System.Runtime.CompilerServices.CompilerGenerated]
    [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
    public partial class ExampleClass
    {
        // MixinType: ExampleMixin1
        public float Property1 { get; set; } = 0.5f;
        private int _field1 = 0;
        private void Method1()
        {
            Console.WriteLine("Test1");
        }
        // MixinType: ExampleMixin2
        public string PropertyText1 { get; set; } = "Test2";
        public string MethodText1()
        {
            return PropertyText1;
        }
    }
}

Versioning

We use SemVer for versioning. For the versions available, see the branches on this repository.

Authors

  • Szymon Hałucha - Maintainer

See also the list of contributors who participated in this project.

License

This project is licensed under the MIT License - see the LICENSE file for details.

There are no supported framework assets in this 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
0.2.1 139 5/1/2024
0.2.0 180 4/13/2024
0.1.0 216 3/29/2024

Fixed bug with the CodeBuilder enumeration methods