Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

283
Visualizações
Cómo agregar una inyección de dependencia genérica

Trabajando en un servicio API de solo lectura y haciendo uso de genéricos para empaquetar la operación en un proceso basado en convenciones.

Interfaz del repositorio:

 public interface IRepository<TIdType,TEntityType> where TEntityType:class { Task<EntityMetadata<TIdType>> GetMetaAsync(); }

Implementación del repositorio:

 public class Repository<TIdType,TEntityType> : IRepository<TIdType,TEntityType> where TEntityType:class { public Repository(string connectionString) { // initialization } public async Tas<EntityMetadata<TIdType>> GetMetaAsync() { // implementation } }

En Startup.cs -> ConfigureServices :

 services.AddSingleton<IRepository<int, Employee>> ( p=> new Repository<int, Employee>(connectionString)); services.AddSingleton<IRepository<int, Department>> ( p=> new Repository<int, Department>(connectionString)); // and so on

Controlador:

 public class EmployeeController : Controller { public EmployeeController(IRepository<int,Employee> repo) {//stuff} }

Actualmente estoy repitiendo la implementación del repositorio para todos los tipos de entidades en ConfigureServices . ¿Hay alguna manera de hacer esto genérico también?

 services.AddSingleton<IRepository<TIdType, TEntityType>> ( p=> new Repository<TIdType, TEntityType>(connectionString));

Entonces, en la llamada del constructor del controlador, ¿puede obtener automáticamente el repositorio relevante?

Actualización 1 : No es un duplicado :

  1. La implementación del repositorio no tiene un constructor predeterminado.
  2. Debido a que no tiene un constructor predeterminado, no puedo proporcionar la solución dada en la pregunta vinculada.
  3. Cuando intento services.AddScoped(typeof(IRepository<>), ...) recibo un error. Using the generic type 'IRepostiory<TIdType,TEntityType>' requires 2 type arguments
about 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Dado que esta pregunta aún no está marcada correctamente como duplicada : la forma de registrar una clase genérica:

 services.AddScoped(typeof(IRepository<,>), typeof(Repository<,>));

ahora puedes resolverlo de la siguiente manera:

 serviceProvider.GetService(typeof(IRepository<A,B>)); // or: with extensionmethod serviceProvider.GetService<IRepository<A,B>>();
about 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda