使用只读api服务并利用泛型将操作打包到基于约定的过程中.
存储库界面:
public interface IRepository<TIdType,TEntityType> where TEntityType:class { Task<EntityMetadata<TIdType>> GetMetaAsync(); }
存储库实现:
public class Repository<TIdType,TEntityType> : IRepository<TIdType,TEntityType> where TEntityType:class { public Repository(string connectionString) { // initialization } public async Tas<EntityMetadata<TIdType>> GetMetaAsync() { // implementation } }
在Startup.cs中 – >配置服务:
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
控制器:
public class EmployeeController : Controller { public EmployeeController(IRepository<int,Employee> repo) {//stuff} }
我目前正在重复ConfigureServices中所有类型的实体类型的存储库实现.有没有办法让这个通用呢?
services.AddSingleton<IRepository<TIdType,TEntityType>> ( p=> new Repository<TIdType,TEntityType>(connectionString));
更新1:不是duplicate:
>存储库实现没有默认构造函数
>因为它没有默认构造函数,所以我无法提供链接问题中给出的解决方案.
>尝试services.AddScoped(typeof(IRepository<>),…)我收到错误使用泛型类型’IRepostiory< TIdType,TEntityType>‘需要2个类型参数