Home

Awesome

Minerals.AutoMixins

GitHub License NuGet Version NuGet Downloads

Package on nuget.org

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.

Features

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.1" />

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

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.