Patternify.Singleton
0.1.2
dotnet add package Patternify.Singleton --version 0.1.2
NuGet\Install-Package Patternify.Singleton -Version 0.1.2
<PackageReference Include="Patternify.Singleton" Version="0.1.2" />
paket add Patternify.Singleton --version 0.1.2
#r "nuget: Patternify.Singleton, 0.1.2"
// Install Patternify.Singleton as a Cake Addin #addin nuget:?package=Patternify.Singleton&version=0.1.2 // Install Patternify.Singleton as a Cake Tool #tool nuget:?package=Patternify.Singleton&version=0.1.2
Patternify.Singleton
This source generator simplifies the implementation of the Singleton design pattern in C#. It ensures that a class has only one instance and provides a global point of access to it, while also handling thread safety and lazy initialization.
Features
- Automatically generates a thread-safe Singleton implementation for your classes.
- Simple and easy-to-use with a single attribute.
- Supports lazy initialization to optimize performance.
How to Use
Step 1: Apply the [Singleton]
Attribute
To transform a class into a Singleton, apply the [Singleton]
attribute to it. The class must be partial to allow the generator to inject code into it.
Example:
using Patternify.Singleton;
namespace Samples.Singleton;
[Singleton]
public partial class Configuration
{
public string SomeProperty { get; set; }
}
Step 2: Let the Generator Do the Work
The generator will automatically create the necessary code to implement the Singleton pattern for the Configuration
class.
Generated code:
// <auto-generated/>
using Patternify.Singleton;
namespace Samples.Singleton
{
public partial class Configuration
{
private static Configuration _instance = null;
private static object obj = new object();
private Configuration() { }
public static Configuration GetInstance()
{
lock(obj)
{
if (_instance == null)
{
_instance = new Configuration();
}
}
return _instance;
}
}
}
Step 3: Access the Singleton
Now you can access the singleton instance using the GetInstance()
method:
Generated code:
var config = Configuration.GetInstance();
config.SomeProperty = "SomeValue";
Installation
To use this source generator in your project, add the NuGet package to your project:
dotnet add package Patternify.Singleton
Contributing
Contributions are welcome! If you encounter any issues or have ideas for improvements, feel free to open an issue or submit a pull request.
License
This project is licensed under the MIT License.
Product | Versions 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. |
-
.NETStandard 2.0
- Microsoft.CodeAnalysis.Common (>= 4.11.0)
- Microsoft.CodeAnalysis.CSharp (>= 4.11.0)
- Microsoft.CodeAnalysis.Workspaces.Common (>= 4.11.0)
- Patternify.Abstraction (>= 0.1.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.