RandomSkunk.DependencyInjection.Decorator
1.0.1
dotnet add package RandomSkunk.DependencyInjection.Decorator --version 1.0.1
NuGet\Install-Package RandomSkunk.DependencyInjection.Decorator -Version 1.0.1
<PackageReference Include="RandomSkunk.DependencyInjection.Decorator" Version="1.0.1" />
paket add RandomSkunk.DependencyInjection.Decorator --version 1.0.1
#r "nuget: RandomSkunk.DependencyInjection.Decorator, 1.0.1"
// Install RandomSkunk.DependencyInjection.Decorator as a Cake Addin #addin nuget:?package=RandomSkunk.DependencyInjection.Decorator&version=1.0.1 // Install RandomSkunk.DependencyInjection.Decorator as a Cake Tool #tool nuget:?package=RandomSkunk.DependencyInjection.Decorator&version=1.0.1
RandomSkunk.DependencyInjection.Decorator
A simple implementation of the decorator pattern for Microsoft.Extensions.DependencyInjection.
Usage
To register a decorated service, add the service to the service collection by calling one of the
AddDecorated
, AddDecoratedTransient
, AddDecoratedScoped
, or AddDecoratedSingleton
extension
methods. Each of these methods returns a IDecoratingBuilder<T>
object with an AddDecorator
method for adding decorators to the service. Multiple decorators can be added to the service by
calling AddDecorator
on the builder multiple times.
services.AddDecoratedSingleton<IExampleService, ExampleService>()
.AddDecorator<IExampleService, LoggingExampleService>();
services.AddDecoratedTransient<IExampleService>(() => new ExampleService())
.AddDecorator((service, serviceProvider) =>
{
var logger = serviceProvider.GetRequiredService<ILogger<LoggingExampleService>>();
return new LoggingExampleService(service, logger);
});
These examples assume the following interface, primary implementation, and decorator implementation:
public interface IExampleService
{
string GetSomething(int someValue);
}
public class ExampleService : IExampleService
{
public string GetSomething(int someValue)
{
return $"Result from ExampleService.GetSomething('{someValue}')";
}
}
public class LoggingExampleService : IExampleService
{
private readonly IExampleService _exampleService;
private readonly ILogger<LoggingExampleService> _logger;
public LoggingExampleService(IExampleService exampleService,
ILogger<LoggingExampleService> logger)
{
_exampleService = exampleService;
_logger = logger;
}
public string GetSomething(int someValue)
{
var something = _exampleService.GetSomething(someValue);
_logger.LogInformation(
"Called IExampleService.GetSomething('{SomeValue}'), returning '{Something}'.",
someValue, something);
return something;
}
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 is compatible. 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 is compatible. |
.NET Framework | net461 is compatible. 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. |
-
.NETFramework 4.6.1
-
.NETStandard 2.0
-
.NETStandard 2.1
-
net6.0
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.