繁体   English   中英

Autofac注册通用存储库,其中T不是类

[英]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替换IDbModelDbModel ,它可以按预期工作。

我的注册如下:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM