【问题标题】:dependency injection in asp.net core with generic parameters具有通用参数的asp.net核心中的依赖注入
【发布时间】:2021-01-09 08:41:43
【问题描述】:

我在使用服务集合时遇到以下错误:

验证服务描述符“ServiceType”时出错: HappinessMeter.BL.GenericBL.IGenericBL'1[HappinessMeter.Entity.Models.MCountry] 生命周期:单例实现实例: HappinessMeter.BL.EFCoreCountryBL':类型的常量值 'HappinessMeter.BL.EFCoreCountryBL' 无法转换为服务类型 'HappinessMeter.BL.GenericBL.IGenericBL`1[HappinessMeter.Entity.Models.MCountry]'

Startup.cs

services.Add(new ServiceDescriptor(typeof(IGenericBL<MCountry>), 
  new EFCoreCountryBL(new EFCoreCountryRepository(context))));
services.Add(new ServiceDescriptor(typeof(IGenericBL<User>),  
   new EFCoreUserBL(new EFCoreUserRepository(context))));

我的 EFCoreRepository 代码是:

public class EFCoreRepository<Tentity, Tcontext> : IRepository<Tentity> where Tentity : class where Tcontext : DbContext
    {
        public readonly Tcontext context;
        public EFCoreRepository(Tcontext _context)
        {
            context = _context;
        }
        public async Task<Tentity> Add(Tentity entity)
        {
            context.Set<Tentity>().Add(entity);
            await context.SaveChangesAsync();
            return entity;
        }

        public async Task<Tentity> Delete(long id)
        {
            var entity = await context.Set<Tentity>().FindAsync(id);
            if (entity == null)
            {
                return entity;
            }

            context.Set<Tentity>().Remove(entity);
            await context.SaveChangesAsync();

            return entity;
        }

        public async Task<Tentity> Get(long id) => await context.Set<Tentity>().FindAsync(id);

        public async Task<List<Tentity>> GetAll() => await context.Set<Tentity>().ToListAsync();

        public async Task<Tentity> Update(Tentity entity)
        {
            context.Entry(entity).State = EntityState.Modified;
            await context.SaveChangesAsync();
            return entity;
        }
    }

EFCoreCountryRepository 是

public class EFCoreCountryRepository : EFCoreRepository<MCountry, HMDEVContext>
    {
        public EFCoreCountryRepository(HMDEVContext context) : base(context)
        {

        }
        public async Task<MCountry> GetByAlpha(string alpha)
        {
            return await  context.MCountry.FirstOrDefaultAsync(x => x.Alpha2Code == alpha);
        }

    }

【问题讨论】:

  • 请出示EFCoreCountryRepository的代码。

标签: asp.net-core dependency-injection repository-pattern


【解决方案1】:

错误提示:EFCoreCountryBL 无法转换为 IGenericBL1&lt;MCountry&gt;

您的类型不匹配或缺少隐式或显式转换。

【讨论】:

  • 谢谢,但我的代码 services.Add(new ServiceDescriptor(typeof(IGenericBL),typeof(GenericBL)));我如何从这里使用泛型类
猜你喜欢
  • 2018-08-30
  • 2019-02-16
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
  • 2021-09-02
  • 2019-06-07
相关资源
最近更新 更多