Autofac:如何注册具有多个类型参数的泛型?注册igenreport &;T, tkey &;与efgenrepor

本文关键字:注册 泛型 igenreport efgenrepor tkey 何注册 Autofac 类型参数 | 更新日期: 2023-09-27 17:52:52

我试图建立一个通用的回购和使用自动测试。我有以下接口:

public interface IGenRepo<T, TKey> where T : class
{
    IQueryable<T> Items { get; }
    T find(TKey pk);
    RepoResult delete(TKey pk);
    RepoResult create(T item);
    RepoResult update(T item);
    RepoResult save();
}

这里是实现这个接口的类:

public class EFGenRepo<T, TKey> : IGenRepo<T, TKey> where T : class
{
    private PortalEntities context = new PortalEntities();
    public IQueryable<T> Items { get { return context.Set<T>().AsQueryable<T>(); } }
    public T find(TKey pk){}
    public RepoResult delete(TKey pk){}
    public RepoResult create(T item){}
    public RepoResult update(T item){}
    public RepoResult save(){}
    private RepoResult save(T item){}
}

这是我使用的注册:

cb.RegisterGeneric(typeof(EFGenRepo<>)).As(typeof(IGenRepo<>));
我在这一行得到的编译错误是:

使用泛型"Domain.Concrete."EFGenRepo需要2类型参数。

我没有使用autofac很多,但是当我删除TKey泛型参数时,它都工作得很好,错误信息:"使用泛型类型'Domain.Concrete。EFGenRepo'需要2个类型参数"消失了…同时仍然使用T参数…谁能告诉我如何正确设置它,宁愿不改变我的IGenRepo接口和EFGenRepo类。

Autofac:如何注册具有多个类型参数的泛型?注册igenreport &;T, tkey &;与efgenrepor

Try

RegisterGeneric(typeof(EFGenRepo<,>)).As(typeof(IGenRepo<,>));