Я пытаюсь обновить проект с. net 4.6.2 до net Core. Текущая версия использует EF6 с внедрением зависимостей Autofa c. Я пытаюсь обновить проект, чтобы использовать встроенный Net Core DI, а также EF Core. У меня возникают проблемы с настройкой внедрения зависимостей. NET Core. Я получаю сообщения об ошибках, связанных с ограничением класса для репозиториев, которые принимают дженерики.
Вот два моих репозитория:
public partial class CustomerRepository<T> : EfRepository<T> where T : CustomerBaseEntity
{
public CustomerRepository(CustomerDbContext context) : base(context)
{
}
}
public partial class OrderRepository<T> : EfRepository<T> where T : OrderBaseEntity
{
public OrderRepository(OrderDbContext context) : base(context)
{
}
}
Вот мой класс EFRepository:
public class EfRepository<T> : IRepository<T>
where T : BaseEntity
{
private readonly DbContext _context;
private DbSet<T> _entities;
public EfRepository(DbContext context)
{
_context = context;
}
.... <additional methods not included> ....
}
Сущности:
public class CustomerBaseEntity : BaseEntity
{
}
public class OrderBaseEntity : BaseEntity
{
}
public class CustomerEntity : CustomerBaseEntity
{
public int ID { get; set; }
public string Name { get; set; }
}
public class OrderEntity : OrderBaseEntity
{
public int ID { get; set; }
public string Name { get; set; }
}
Вот мой код для внедрения зависимостей:
//DBContext
services.AddDbContext<CustomerDbContext>(options => options.UseSqlServer(configuration["ConnectionStrings:CustomerDB"]));
services.AddDbContext<OrderDbContext>(options => options.UseSqlServer(configuration["ConnectionStrings:OrderDB"]));
//Repositories
services.AddScoped(typeof(IRepository<>), typeof(CustomerRepository<>));
services.AddScoped(typeof(IRepository<>), typeof(OrderRepository<>));
Вот ошибка, которую я получаю:
System.ArgumentException: GenericArguments[0], 'OrderEntity', on 'CustomerRepository`1[T]' violates the constraint of type 'T'.
Может ли кто-нибудь помочь мне понять, как я могу сообщить DI, что CustomerRepository должен вводить только типы сущностей, унаследованные от «CustomerBaseEntity», а OrderRepository должен внедрять только типы сущностей, унаследованные от «OrderBaseEntity»?
*** Обновить : Я также пробовал следующий код DI (оба безуспешно):
services.AddScoped(typeof(IRepository<CustomerBaseEntity>), typeof(CustomerRepository<CustomerBaseEntity>));
services.AddScoped(typeof(IRepository<OrderBaseEntity>), typeof(OrderRepository<OrderBaseEntity>));
and
services.AddScoped(IRepository<CustomerBaseEntity>, CustomerRepository<CustomerBaseEntity>);
services.AddScoped(IRepository<OrderBaseEntity>, OrderRepository<OrderBaseEntity>);