Facilita a injeção de depedências através de anotações nas classes.
- TransientInjection: Registra a classe como Transient, ou seja, uma nova instância é criada a cada injeção;
- ScopedInjection: Registra a classe como Scoped, ou seja, uma nova instância é criada por requisição, ou escopo, utilizando o IServiceScopeFactory.Create();
- SingletonInjection: Registra a classe como Singleton. ou seja, uma única instância é criada para todo o tempo de vida da aplicação.
Anote sua classe com uma das anotações disponíveis.
[ScopedInjection(typeof(IOrderRepository), typeof(IOrderRepositoryReadOnly))]
class OrderRepository : IOrderRepository, IOrderRepositoryReadOnly
{
}
[SingletonInjection(typeof(HttpClient))]
class CustomHttpClient : HttpClient
{
}
[TransientInjection(typeof(IDomainEventHandler<Order>))]
class OrderEventHandler: IDomainEventHandler<Order>
{
}
You can retrieve a instance of a registered type if you want.
[ScopedInjection(new [] { typeof(IUnitOfWork) }, typeof(CustomDbContext)]
class CustomDbContext : DbContext, IUnitOfWork
{
}
Durante a configuração dos serviçoes, chame o método AddInjections fornecendo os assemblies que deseja que sejam analisados.
public void ConfigureServices(IServiceCollection services)
{
...
services.AddInjections(Assembly.GetExecutingAssembly());
...
}
E pronto, agora é só usar.