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类。
Try
RegisterGeneric(typeof(EFGenRepo<,>)).As(typeof(IGenRepo<,>));