AutoYumYum 1.1.2
Deprecated: Apologies for the oversight — this version includes an incorrect namespace and is missing RegisterWithFactory. These have been fixed in version 1.2.1 of DCTekSolutions.AutoYumYum.
dotnet add package AutoYumYum --version 1.1.2
NuGet\Install-Package AutoYumYum -Version 1.1.2
<PackageReference Include="AutoYumYum" Version="1.1.2" />
<PackageVersion Include="AutoYumYum" Version="1.1.2" />
<PackageReference Include="AutoYumYum" />
paket add AutoYumYum --version 1.1.2
#r "nuget: AutoYumYum, 1.1.2"
#:package AutoYumYum@1.1.2
#addin nuget:?package=AutoYumYum&version=1.1.2
#tool nuget:?package=AutoYumYum&version=1.1.2
AutoYumYum
AutoYumYum makes dependency injection in .NET a breeze.
Register your services with a simple attribute and let AutoYumYum do the rest.
Free to use for personal and commercial projects. This package is closed source.
Features
- Attribute-driven service registration (Singleton, Scoped, Transient)
- Supports Microsoft.Extensions.DependencyInjection
- No more bloated DI setup code
Usage
RegisterAs - Singleton
[RegisterAs<IMyService>(lifetime: RegisterScopeType.Singleton)]
public class MyService : IMyService
{
// Implementation
}
Then, in your startup:
services.AddAttributedServices(typeof(Program).Assembly);
More Usage Examples:
RegisterAs - Transient
[RegisterAs<ILogger>(lifetime: RegisterScopeType.Transient)]
public class ConsoleLogger : ILogger
{
public void Log(string message) => Console.WriteLine(message);
}
RegisterAs - Scoped
[RegisterAs<IOrderService>(lifetime: RegisterScopeType.Scoped)]
public class OrderService : IOrderService
{
// Implementation
}
RegisterAsSelf
[RegisterAsSelf(lifetime: RegisterScopeType.Singleton)]
public class CacheManager
{
public void Clear() => Console.WriteLine("Cache cleared.");
}
RegisterWithFactory
public interface ISpecialService
{
string Info { get; }
}
public class SpecialService : ISpecialService
{
public string Info { get; }
public SpecialService(string info)
{
Info = info;
}
}
public static class SpecialServiceFactory
{
public static ISpecialService Create(IServiceProvider sp)
{
return new SpecialService("Created via factory");
}
}
[RegisterWithFactory(typeof(SpecialServiceFactory), lifetime: RegisterScopeType.Singleton)]
public class SpecialServiceMarker : ISpecialService
{
public string Info => throw new NotImplementedException("Marker class should never be instantiated directly.");
}
RegisterWithFactory (Advanced Example)
You can register services using a factory class that contains a Create(IServiceProvider)
method. This is useful when:
- You have conditional logic for which implementation to return
- The service's constructor needs runtime configuration or custom logic
- You want to keep instantiation centralized
Interface + Implementations
public interface ISpecialService
{
string Info { get; }
}
public class FastSpecialService : ISpecialService
{
public string Info => "I am FastSpecialService";
}
public class SecureSpecialService : ISpecialService
{
public string Info => "I am SecureSpecialService";
}
The Factory Class
public static class SpecialServiceFactory
{
public static ISpecialService Create(IServiceProvider sp)
{
// Choose based on any app condition, injected service, env var, etc.
var useSecure = true; // hardcoded for clarity in this example
return useSecure
? new SecureSpecialService()
: new FastSpecialService();
}
}
The factory can use logic to determine which implementation to return at runtime.
The Marker Class
[RegisterWithFactory(typeof(SpecialServiceFactory), lifetime: RegisterScopeType.Singleton)]
public class SpecialServiceMarker : ISpecialService
{
public string Info => throw new NotImplementedException("This is a factory-registered service and should not be constructed directly.");
}
The SpecialServiceMarker
class serves as a declarative marker so that AutoYumYum knows:
- What interface to register
- What factory to call
- What lifetime to use
The marker class is never actually instantiated.
Consuming the Service
public class HomeController
{
private readonly ISpecialService _special;
public HomeController(ISpecialService special)
{
_special = special;
}
public string Index()
{
return _special.Info;
}
}
Summary
- Use
[RegisterWithFactory]
to register services with conditional or complex construction logic - The marker class ensures discovery and DI compatibility
- The factory method controls instantiation at runtime
Support / Donate
AutoYumYum by DC Tek Solutions is currently free, and user support keeps it that way!
If you find them helpful, please consider supporting future development:
Thank you for your support!
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. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.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 is compatible. |
.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
-
.NETStandard 2.1
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
- Initial release.
- Register services with attributes: [RegisterAsAttribute<T>].
- Supports Singleton, Scoped, Transient and RegisterWithFactory
- Flexible filter for features.
- Now supports NETStandard 2.0 and 2.1