Faça com que o .NET Core DI resolva automaticamente a classe por implementação genérica de interface / classe abstrata
Existe uma maneira no .NET Core de registrar uma interface genérica e resolver uma classe que corresponde a uma determinada implementação.
Por exemplo, eu tenho a seguinte interface:
public interface IMapper<TFrom, TTo>
{
}
Eu também tenho uma classe abstrata:
public abstract class Mapper<TFrom, TTo> : IMapper<TFrom, TTo>
{
protected Mapper()
{
// some generic stuff
}
public abstract TTo Map(TFrom);
}
Posso então criar uma implementação assim:
public class UserMapper : Mapper<Domain.User, Entity.User>
{
public override Entity.User Map(Domain.User from)
{
// do mapping
}
}
Existe uma maneira, usando o .NET Core DI padrão para registrarIMapper<,>
e deixá-lo resolver automaticamente a classe?
Então, se eu, por exemplo, faria isso em algum lugar no código:
class SomeClass
{
public SomeClass(IMapper<Domain.User, Entity.User> mapper) {}
}
Que de alguma forma sabe que deveria resolver a classeUserMapper<Domain.User, Entity.User>
?
O motivo é que é um pouco detalhado registrar manualmente cada mapeador, específico para uma implementação. Então eu estou esperandoMicrosoft.DependencyInjection
é inteligente o suficiente para resolver automaticamente sua implementação de alguma forma.