[英]Autofac register generic repository where T is not class
尝试解析通用存储库以进行数据库访问时遇到一个问题。 当我使用这两个作为仓库实现/接口时,我无法解析例如IRepository<ICustomer>
:
接口:
public interface IRepository<T> where T : IDbModel
{ ... }
执行:
public class Repository<T> : IRepository<T> where T : DbModel
{ ... }
但是当我在两种情况下都用class
替换IDbModel
和DbModel
,它可以按预期工作。
我的注册如下:
builder.RegisterGeneric(typeof(Repository<>)).As(typeof(IRepository<>));
builder.RegisterType<DbModel>().As<IDbModel>();
builder.RegisterType<Customer>().As<ICustomer>();
为了完整起见,这里是ICustomer
:
public interface ICustomer : IDbModel
{ ... }
Customer
:
public class Customer : DbModel, ICustomer
{ ... }
IDbModel
:
public interface IDbModel
{ ... }
和DbModel
(我在删除abstract
时检查了它是否起作用,但是没有):
public abstract class DbModel : IDbModel
{ ... }
我想知道是否可以通过某种方式进行首次尝试?
通过要求Autofac解析IRepository<ICustomer>
,它将尝试解析Repository<ICustomer>
并且ICustomer
不是DbModel
要解决该错误,您应该将IRepository<TModel>
上的类类型约束替换为接口类型约束。
public class Repository<T> : IRepository<T>
where T : IDbModel
{ }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.