Minerals.AutoMixins
Package for automatic mixin design pattern generation using an incremental source generator
Install / Use
/learn @SzymonHalucha/Minerals.AutoMixinsREADME
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.
Features
- 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" />
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.
Related Skills
diffs
337.3kUse the diffs tool to produce real, shareable diffs (viewer URL, file artifact, or both) instead of manual edit summaries.
clearshot
Structured screenshot analysis for UI implementation and critique. Analyzes every UI screenshot with a 5×5 spatial grid, full element inventory, and design system extraction — facts and taste together, every time. Escalates to full implementation blueprint when building. Trigger on any digital interface image file (png, jpg, gif, webp — websites, apps, dashboards, mockups, wireframes) or commands like 'analyse this screenshot,' 'rebuild this,' 'match this design,' 'clone this.' Skip for non-UI images (photos, memes, charts) unless the user explicitly wants to build a UI from them. Does NOT trigger on HTML source code, CSS, SVGs, or any code pasted as text.
openpencil
1.8kThe world's first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.
HappyColorBlend
HappyColorBlendVibe Project Guidelines Project Overview HappyColorBlendVibe is a Figma plugin for color palette generation with advanced tint/shade blending capabilities. It allows designers to
