Anetta is a tool for extending Microsoft.Extensions.DependencyInjection DI capabilities with annotations.
PM> Install-Package Anettaor
> dotnet add package AnettaIn your ConfigureServices method use AddAnnotations method provided by Anetta.Extensions namespace.
using Anetta.Extensions;
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddAnnotations();
/// other service registrations
}Now you can mark your classes with 3 different lifetime attributes: Singleton, Scoped, Transient.
using Anetta.Attributes;
[Singleton]
public class SomeClass
{
/// other class behaviour
}You can register your configurations with Configuration attribute.
Create a class that represents configuration from your IConfiguration instance.
using Anetta.Configuration;
[Configuration]
public class AppSettings
{
public string Key { get; set; }
}also you are free to change underlying section name.
using Anetta.Configuration;
[Configuration("SettingsGroup:SomeSettings:AppSettings")]
public class AppSettings
{
public string Key { get; set; }
}and in your ConfigureServices method use AddConfigurations method provided by Anetta.Configuration namespace.
using Anetta.ServiceConfiguration;
public IConfiguration Configuration { get; }
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddConfigurations(Configuration);
/// other service registrations
}Now you can inject your settings into any class that's registered to DI container.
public class SampleService
{
private readonly IOptionsMonitor<AppSettings> _appSettings;
public SampleService(IOptionsMonitor<AppSettings> appSettings)
{
_appSettings = appSettings;
}
public void Execute()
{
Console.WriteLine("SampleService is executed.");
}
}You can extract logic from ConfigureServices to seperate classes by using IServiceConfigurator interface.
Create a class that implements IServiceConfigurator interface.
using Anetta.ServiceConfiguration;
public class SampleServiceWithConfiguratorConfigurator : IServiceConfigurator
{
public void Configure(IServiceCollection services, IConfiguration configuration)
{
services.AddSingleton<SampleServiceWithConfigurator>();
}
}and in your ConfigureServices method use AddServiceConfigurators method provided by Anetta.ServiceConfiguration namespace.
using Anetta.ServiceConfiguration;
public IConfiguration Configuration { get; }
public IServiceProvider ConfigureServices(IServiceCollection services)
{
services.AddServiceConfigurators(Configuration);
/// other service registrations
}In lieu of a formal style guide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.
This project is licensed under the MIT License - see the LICENSE file for details